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