提问者:小点点

何时调用FragmentPagerAdapter的getItem?


我正在编写一个使用FragmentPagerAdapter的应用程序。适配器中的片段需要根据外部数据进行更新--但这不会发生。我注意到片段类只在getItem函数中实例化一次:

@Override
public Fragment getItem(int position) {
    TabInfo info = mTabs.get(position);
    return Fragment.instantiate(mContext, info.clss.getName(),
                info.args);
}

即使我删除了类并使用一个新的类,也没有任何帮助--这个方法只被调用一次,第一次填充选项卡时,然后再也不会调用。有人知道为什么吗?

谢啦!


共3个答案

匿名用户

每当适配器需要片段而该片段不存在时,将调用getItem。

如果片段已经存在于FragmentManager中,那么就不需要实例化它,也不需要调用getItem。

要更新现有片段,您需要从FragmentManager或适配器中检索它,并相应地操作它。

默认情况下,viewpager将为可见页面及其旁边的页面创建片段。即从位置1和2的片段开始。当您滑动到第2页时,位置3的片段将被创建,等等

匿名用户

比上面的答案更具体一点(这是正确的!),getItem是由FragmentPagerAdapter的instantiateItem(ViewGroup container,int position)方法调用的。以防万一:)

匿名用户

只需使用FragmentStatePagerAdapter而不是FragmentPagerAdapter

FragmentStatePagerAdapter销毁不需要的fragments实例的实例,并按需重新实例化。另一方面,FragmentPagerAdapter只是分离片段并重新附加它。因此在FragmentPagerAdapter中创建的片段永远不会被销毁。这就是为什么我总是更喜欢FragmentStatePagerAdapter。