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

时间:2014-10-30 17:47:52

标签: android android-activity android-fragments

我有一个Fragment,带有“选择一年”按钮。此按钮向后台添加ListFragment,用户可以选择一年。选择一年后,我想处理ListFragment并返回第一个片段。使用在ListFragment

中选择的数据更新第一个片段的最佳方法是什么?

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

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

1 个答案:

答案 0 :(得分:6)

  

所有片段到片段的通信都是通过关联的方式完成的   活动。两个碎片永远不应该直接通信。 [Source]

在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);
    }
}

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

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

    if (fragment != null) {
        fragment.updateValue(position);
    }
}