FragmentTabsPager.java
我有一个 FragmentActivity,它使用(在 Android Support v4 示例中找到)中提出的示例适配器具有选项卡式片段
private static class TabsAdapter extends FragmentPagerAdapter
implements TabHost.OnTabChangeListener, ViewPager.OnPageChangeListener {
我的 FragmentActivity 中有一个菜单项,可以让我随意重新加载片段中的数据。在我实现选项卡界面之前,我可以保证所需的片段将被加载到内存中。我会通过 获取 Fragment getSupportFragmentManager().findFragmentById()
,将其转换,然后调用它的 reload 函数。很简单。
有没有办法可以与FragmentPagerAdapter
从 FragmentActivity 加载的特定 Fragment 实例进行通信?使用示例中提供的TabAdapter
' getItem()
,我可以检索我的 Fragment 的一个新实例(通过Fragment.instantiate()
),但不是对当前显示的实例的引用。那才是最重要的。
编辑:除了柏拉图的回答...
由于我所有的选项卡都属于不同的类(例如 FooFragment、BarFragment 等),因此识别和检索特定类型的活动片段非常有用。
Object getActiveFragmentOfType(Class<?> cls) {
List<Fragment> frags = getActiveFragments();
for(Fragment one : frags) {
if(cls.isInstance(one)) {
return one;
}
}
return null;
}
然后,当我想处理特定的选项卡/片段/类时,我只是做这样的事情
Object fooFragmentObject = getActiveFragmentOfType(FooFragment.class);
if(fooFragmentObject != null) {
// Do something with an active reference to fooFragmentObject that's
// guaranteed to be castable to FooFragment
}