父碎片到Child Fragment通信

时间:2017-06-05 23:13:48

标签: java android android-fragments

我一直在搜索并且没有找到嵌套片段与父片段通信的最佳方法。 Android文档声明:

  

所有片段到片段的通信都是通过关联的Activity完成的。两个碎片永远不应该直接沟通。

假设我有一个图库应用,有一个 ViewPagerFragment(父级) ImageFragment(子级),用于在点击图片时全屏显示图片。我需要将文件的ArrayList从我的父片段传递给子片段。什么是正确的方法呢?

1)在父片段中为ArrayList创建一个getter,并使用子片段中的getParentFragment()来访问此方法?

2)实现一个界面并浏览Activity,但是如果它没有ID,我如何从Activity中找到子片段

3)或者在父片段

中使用它

ChildFragment fragment =(ChildFragment)getChildFragmentManager().findFragmentById(R.id.child_fragment_id);

只需在子片段中使用setter。

但是我又如何获得childFragment的ID?

提前感谢大家

3 个答案:

答案 0 :(得分:8)

如果您想要将您的子片段与您的父片段进行通信,您可以使用子片段中的getParentFragment()方法。

示例

public class ParentFragment extends Fragment {

    public int getCount() {
        return 10;
    }
}

public class ChildFragment extends Fragment {


    void doAction() {
        Fragment parentFragment = getParentFragment();

        if(parentFragment instanceof ParentFragment) {
            int count = ((ParentFragment) parentFragment).getCount();
        }
    }
}

答案 1 :(得分:2)

据我所知,通过活动进行碎片碎片通信是为了由同一活动协调的兄弟碎片。

在这种情况下,siblign片段由父片段协调,所以我会说通信应该由父片段管理。

如果你直接使用片段,那么你可以使用ChildFragmentManager()。

如果您正在使用ViewPager,则将ChildFragmentManager传递给ViewPager,并将其传递给FragmentManager。

如果你必须传递一个List,我认为最简单的是ChildFragment在准备接收它时通过调用ParentFragment上的方法来请求它。它总是可以通过getParentFragment()得到它的实现。

我不确定调用getParentFrament()来获取列表最安全的位置,但是你可以在onResume()中的onActivityCreated(),o中尝试onCreateView()。

要调用返回列表的方法,可以将父Fragment强制转换为已扩展的特定Fragment类,否则可以使用返回List的方法定义接口,并使扩展父Fragment实现它。

然后在子Fragment中,通过接口调用父节点来调用方法并获取列表。

答案 2 :(得分:0)

应使用Bundle作为参数将数据传递给片段。因此,只需在启动时将Arraylist(序列化或其他)传递给您的子片段