从Fragment中获取变量引用到Activity

4
我有一个活动(MainActivity),它持有一个带有ArrayList<Uri> array_list = new ArrayList<Uri>();的片段(FragmentA)。如何让MainActivity获取该array_list的引用?
现在如果你问我为什么要在活动中获取片段的变量引用,我会说,我计划在MainActivity上点击操作按钮时获取array_list中的项目。
我正在使用ViewPager。我没有片段ID。

1
使用接口作为回调到活动。 - Raghunandan
@Raghunandan - 你能给我一个例子吗? - luwionline
请参考 http://developer.android.com/guide/components/fragments.html 中的示例,使用回调与活动进行通信。 - Raghunandan
3个回答

3
这里有一个很好的教程:这里 在Activity中定义接口并在Fragment中实现它

为了让Fragment向上通信到它的Activity,你可以在Fragment类中定义一个接口,并在Activity中实现它。在Fragment的onAttach()生命周期方法中,Fragment会捕获接口实现,并且可以调用接口方法来与Activity通信。


1

可能最简单的方法是使用FragmentManager在活动中检索附加的片段,然后调用该片段上的getMyList()来获取您想要的列表。

FragmentA fr = (FragmentA) getFragmentManager().findFragmentById(R.id.my_fragment_a_id);
if(fr != null) {   
    List<Uri> list = fr.getMyList();
    // ... do some fun stuff
}

请注意,由于Activity生命周期的原因,将对片段的引用保留在FragmentManager之外不是一个好的做法(您最终会得到对已被收集的片段的引用,或者您可以阻止GC有效地清理内存)。

1
这是访问片段变量的最简单和最优雅的解决方案。谢谢! - IgorGanapolsky

-1

只需将 ArrayList array_list = new ArrayList(); 作为静态变量,例如:public static ArrayList array_list = new ArrayList(); 然后在 MainActivity 中调用此数组如:FragmentA.array_list。

** 记住一件事,每当添加此数组中的项目时,请不要忘记清除该数组。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接