【问题标题】:Keep fragments from calling onPause in ViewPager防止片段在 ViewPager 中调用 onPause
【发布时间】:2014-06-29 15:20:31
【问题描述】:

我有一个带有 3 个标签的 ViewPager。根据我所看到的,当容器活动开始时,前两个片段处于恢复状态。我还注意到只有两个并排的片段被恢复,第三个被停止。我遇到的问题是我从网络加载数据以在第一个片段中使用并将自定义对象存储在 ArrayList 中,这工作正常,但是当我导航到第三个片段时,当第一个片段进入停止状态时数据丢失.因此,在从第三个片段导航回第一个片段时,ArrayList 为空(我在 onCreate 中启动了一个 AsyncTask 以检索和填充 ArrayList)。

我想要的是一种在 ViewPager 中的所有 3 个片段之间导航时维护 ArrayList 成员变量的简单方法。 OnSaveInstanceState 与我的对象扩展 Parcelable 在这种情况下将不起作用,因为它从未调用过。此外,写入和读取数据库或自定义 SharedPreference 似乎有点过分,并且在片段之间滑动时引入了不必要的延迟。有没有一种简单的方法可以实现这一目标?

【问题讨论】:

  • 您使用的是哪种 ViewPager。浏览器的行为有所不同。如果您使用 FragmentPagerAdapter 只需尝试添加 setOffScreenPageLimit(3); 这应该可以防止您的片段丢失数据。如果您需要支持超过 3 个片段,但您必须使用 FragmentStatePagerAdapter 以获得更好的性能并使用 onSaveInstanceState(Bundle outstate) 单独管理片段
  • 谢谢@inner_class7 我正在使用 FragmentPagerAdapter 和 setOffScreenPageLimit(2) 正是我正在寻找的,并解决了我的问题。如果您将此作为答案,我会将其标记为已接受。
  • 酷,会的。请记住,虽然使用这种方法更多的碎片不会很有效,但对于少量的碎片,你会没事的。

标签: android android-viewpager fragment


【解决方案1】:

使用 FragmentPagerAdapter,您可以在 ViewPager 的 onCreate(Bundle savedInstanceState) 方法中添加以下内容:

ViewPager mViewPager = (ViewPager) findViewById(R.id.myViewPager);
mViewPager.setOffScreenPageLimit(2);

这将使您的片段保持完整。祝你好运。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-23
    • 1970-01-01
    相关资源
    最近更新 更多