我正在编写一个使用FragmentPagerAdapter的应用程序。需要根据外部数据更新适配器中的片段 - 但这不会发生。我注意到片段类只在getItem函数中实例化了一次:
@Override
public Fragment getItem(int position) {
TabInfo info = mTabs.get(position);
return Fragment.instantiate(mContext, info.clss.getName(),
info.args);
}
即使我删除了该类并使用了一个新类,也没有任何帮助 - 这个方法只调用一次,第一次填充选项卡,然后再也不会。任何人都知道为什么?
谢谢!
答案 0 :(得分:49)
getItem。
如果片段已经存在于FragmentManager中,那么就不需要实例化它,也不需要调用getItem。
要更新现有片段,您需要从FragmentManager或适配器中检索它并相应地对其进行操作。
默认情况下,viewpager将为可见页面和旁边的页面创建片段。即,首先是位置1和2中的片段。当您滑动到第2页时,将创建位置3处的片段等
答案 1 :(得分:17)
为了比上面的答案更具体(这是正确的!),getItem由FragmentPagerAdapter的instantiateItem(ViewGroup容器,int位置)方法调用。以防万一有帮助:)
答案 2 :(得分:1)
简单使用FragmentStatePagerAdapter
代替FragmentPagerAdapter