【问题标题】:Iterate over all currently loaded fragments in a ViewPager遍历 ViewPager 中所有当前加载的片段
【发布时间】:2014-12-29 21:29:56
【问题描述】:

我有一个 ViewPager。它有片段。创建这些片段时,它们会从服务器加载数据。当用户选择一个菜单项时,我想告诉这些片段过滤它们的数据而不从服务器重新加载。

为此,我有一个 FragmentPagerAdapter 的子类,它保留一个 List 以在创建每个 Fragment 时保存对它的引用。选择菜单项后,我只需遍历该集合并在每个 Fragment 上调用一个方法。

旋转设备时会出现问题。框架自动将片段恢复到它们的父视图,而不调用我的适配器的 getItem 方法,这意味着我的 List 是空的。

如何在设备旋转时重新填充该列表,或者在不保留列表的情况下获取 ViewPager 的所有子片段的列表?

编辑:需要注意的是,我的 ViewPager 存在于 Fragment 中,并且 Fragment 通过侧面导航菜单进行热交换。换句话说,我的 ViewPager 不属于 Activity,并且存在一些关于 ViewPager 未正确清理其子片段的已知问题,这可能会加剧问题。

【问题讨论】:

  • 你可以切换到我的ArrayPagerAdapter,这样会更容易:github.com/commonsguy/cwac-pager
  • 我处于无法在此应用程序中包含开源软件的位置。您的解决方案看起来非常好,但我不确定它如何解决我的问题。我在上面添加了编辑。

标签: android android-fragments android-viewpager


【解决方案1】:

查看此链接Get Current visible fragment in ViewPager

作者基本上建议了两种类似的方法,即在片段创建时附加标签并对其进行跟踪。

getSupportFragmentManager().beginTransaction().add(myFragment, "Some Tag").commit(); 

然后像这样检索标签:

int index = mViewPager.getCurrentItem();
String tag = mPageReferenceMap.get(index);
Fragment myFragment = getSupportFragmentManager().findFragmentByTag(tag);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-17
    • 1970-01-01
    相关资源
    最近更新 更多