将数据从一个片段发送到另一个片段的正确方法是什么?

BLu*_*NiX 0 android android-fragments android-activity

我有一个Fragment"选择一年"按钮.此按钮ListFragment在后台添加一个用户可以选择一年的后台.一旦选择了一年,我想处理ListFragment并返回第一个片段.使用在ListFragment?中选择的数据更新第一个片段的最佳方法是什么?

TL; DR:Fragment1打开Fragment2,用户在Fragment2中选择选项.如何使用此数据更新Fragment1?

我目前的解决方案是一个静态成员的公共类,但我想知道是否Android有更好的方法.

Jst*_*wll 6

所有Fragment-to-Fragment通信都是通过相关的Activity完成的.两个碎片永远不应该直接通信.[ 来源 ]

在Fragment2中定义一个接口,并在主机Activity中实现该接口.当您从Fragment2调用接口方法时,您可以从Activity上的接口方法内部访问Fragment1,并通过其公共方法将相应的数据传递给Fragment1.

创建一个界面:

public class Fragment2 extends ListFragment {
    OnItemSelectedListener mCallback;

    public interface OnItemSelectedListener {
        public void onItemSelected(int position);
    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        try {
            mCallback = (OnItemSelectedListener ) activity;
        } catch (ClassCastException e) {
            throw new ClassCastException(activity.toString()
                    + " must implement OnItemSelectedListener");
        }
    }

    @Override
    public void onListItemClick(ListView l, View v, int position, long id) {
        mCallback.onItemSelected(position);
    }
}
Run Code Online (Sandbox Code Playgroud)

添加implements Fragment2.OnItemSelectedListener到您的活动定义,并定义onItemSelected方法:

public void onItemSelected(int position) {
    Fragment1 fragment = (Fragment1)
            getSupportFragmentManager().findFragmentById(R.id.fragment1);

    if (fragment != null) {
        fragment.updateValue(position);
    }
}
Run Code Online (Sandbox Code Playgroud)