【发布时间】:2013-06-24 10:18:29
【问题描述】:
我有一个 FragmentActivity,它使用FragmentTabsPager.java 中提出的示例适配器(在 Android 支持 v4 示例中找到)具有选项卡式片段
private static class TabsAdapter extends FragmentPagerAdapter
implements TabHost.OnTabChangeListener, ViewPager.OnPageChangeListener {
我的 FragmentActivity 中有一个菜单项,可以让我随意重新加载片段中的数据。在我实现选项卡界面之前,我可以保证所需的片段将被加载到内存中。我会通过getSupportFragmentManager().findFragmentById() 获取片段,将其转换,然后调用它的重新加载函数。很简单。
有没有办法可以与通过 FragmentPagerAdapter 从 FragmentActivity 加载的特定 Fragment 实例进行通信? 使用示例中提供的 TabAdapter 的 getItem(),我可以检索 new 实例(通过 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
}
【问题讨论】:
标签: android android-fragments android-viewpager