java – 如何创建一个接口以从Fragment获取信息到Android Activity?

在过去的几天里,我一直在拼命尝试用一个简单的片段构建一个Android应用程序(我使用了两次).我想将片段的EditText-boxes的内容传递给新活动.我只是无法弄清楚如何从片段中获取这些内容.到目前为止我所拥有的是:

我有我的edit_text_fragment.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <EditText 
        android:id="@+id/my_edit_text"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:hint="my hint" />
</LinearLayout>

和相应的MyEditTextFragment.java:

public class MyEditTextFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.edit_text_fragment, container, false);
        return view;
    }
}

然后我在main.xml中使用这个片段两次,如下所示:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <fragment 
        android:id="@+id/detailfragment_placeholder"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        class="com.example.fragmenttester5.MyEditTextFragment" />
    <fragment 
        android:id="@+id/detailfragment_placeholder2"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        class="com.example.fragmenttester5.MyEditTextFragment" />
    <Button 
        android:id="@+id/submit_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Submit all of it" />
</LinearLayout>

在我的MainActivity中,我将按钮连接到一个新活动:

public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button submitButton = (Button) findViewById(R.id.submit_button);
        submitButton.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v){
                Intent intent = new Intent(MainActivity.this, OtherActivity.class);
                intent.putExtra("result1", "the_result_from_the_first_editText");
                intent.putExtra("result2", "the_result_from_the_second_editText");
                startActivity(intent);
            }
        });
    }
}

我想我现在需要在Fragment中定义某种界面,但我找不到如何.我读了几个例子和教程(比如this one),但它们对我来说毫无意义.我不明白给出的代码,我只是不明白如何根据我的用例调整它.

所以我的问题;任何人都可以帮我从活动中获取片段的内容吗?这个例子非常受欢迎,因为我只是在这里撞墙.

最佳答案
因此,如果事件发生在Fragment中,您将创建一个与Activity通信的接口.对于这种情况,您只需在活动可以调用的片段中创建一个可访问的方法.所以

public class MyEditTextFragment extends Fragment {
    private EditText mEditText;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.edit_text_fragment, container, false);
        return view;
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        mEditText = (EditText) getView().findViewById(R.id.my_edit_text);
    }

    public Editable getText() {
        return mEditText.getText();
    }
}

然后

public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final MyEditTextFragment fragment1 = (MyEditTextFragment)
            getFragmentManager().findFragmentById(R.id.detailfragment_placeholder);

        final MyEditTextFragment fragment2 = (MyEditTextFragment)
            getFragmentManager().findFragmentById(R.id.detailfragment_placeholder2);

        Button submitButton = (Button) findViewById(R.id.submit_button);
        submitButton.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v){

                String firstResult = fragment1.getText().toString();
                String secondResult = fragment2.getText().toString();

                Intent intent = new Intent(MainActivity.this, OtherActivity.class);
                intent.putExtra("result1", firstResult);
                intent.putExtra("result2", secondResult);
                startActivity(intent);
            }
        });
    }
}

这假设您在FragmentTransaction中分配了Fragment标记.一定要检查空片段(为简洁起见省略)

转载注明原文:java – 如何创建一个接口以从Fragment获取信息到Android Activity? - 代码日志