【问题标题】:When is FragmentPagerAdapter's getItem called?FragmentPagerAdapter 的 getItem 什么时候调用?
【发布时间】:2013-10-12 21:43:12
【问题描述】:

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

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

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

谢谢!

【问题讨论】:

    标签: android fragmentpageradapter


    【解决方案1】:

    只要适配器需要一个片段并且该片段不存在,就会调用getItem。

    如果 FragmentManager 中已经存在该片段,则无需实例化它,也无需调用 getItem。

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

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

    【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      只需使用FragmentStatePagerAdapter 而不是FragmentPagerAdapter

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

      【讨论】:

      • 我知道这已经很老了,但无论如何我还是要添加。片段寻呼适配器保留内存中的片段,如果只有几个选项卡则使用。片段状态寻呼机适配器将在每次滑动时销毁片段实例以节省内存
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-08
      • 2017-11-20
      • 1970-01-01
      • 1970-01-01
      • 2018-07-12
      • 2019-12-25
      • 1970-01-01
      相关资源
      最近更新 更多