【问题标题】:ActionBarActivity's lifecycle explanationActionBarActivity生命周期解释
【发布时间】:2014-05-28 02:49:32
【问题描述】:

假设我们有一个应用程序,它包括:

  1. 名为 MainActivity 的 ActionBarActivity 以 ViewPager 作为其布局(用于片段之间的水平滑动),其中包含下面详述的两个片段。
  2. SettingFragment 控制 ContentFragment 的 Controls 的可见性(例如,当我们在 Setting Fragment 中的 visibilitySpinner 中选择 2 时,它将使 ContentFragment 上的 EditText1 和 EditText2 可见,同时将 EditText3 的可见性保留为 GONE), SettingFragment 位于第一页ViewPager。
  3. ContentFragment 由 3 个 EditText 组成。

那么当activity第一次创建时,它会按顺序创建fragment吗? (SettingFragment > ContentFragment)还是会同时创建?更准确地说,更新 ContentFragment 中控件的可见性的最佳事件是什么?

我的想法是在 SettingFragment 中创建一个按钮,然后在 onClick 事件上更新 ContentFragment 控件的可见性。这很好用,但我认为如果我尝试使用相同的方法一次更新多个片段的可见性,我会得到 NullPointerException(因为 AFAIK ViewPager 只创建我们当前“活动”片段的上一页和下一页,CMIIW)。

谁能给我一个更清晰的见解?非常感谢。

【问题讨论】:

    标签: android android-fragments android-actionbaractivity


    【解决方案1】:

    ViewPager 并没有真正设计为在页面之间进行交互。它旨在缓存和执行良好,同时显示相当不变的内容。话虽如此,有一些解决方法涉及每次用户更改页面时重新加载片段,看看:

    Update data in ListFragment as part of ViewPager

    另一方面,回答您关于 ViewPager 仅保持前一个和下一个片段处于活动状态的问题,您可以这样控制:

    mViewPager.setOffscreenPageLimit(2);
    

    参考: Prevent ViewPager from destroying off-screen views

    【讨论】:

    • 我明白了,OffscreenPageLimit 肯定会派上用场。但是在阅读了您的第一个参考资料后,我想我已经有了一个解决方法,方法是将 SettingFragment 上选择的任何参数存储到 MainActivity,然后我将在 ContentFragment 上的 onCreate 或 onCreateView 事件中设置控件的可见性。 (但仍需要对其进行一些测试)总的来说,感谢您指出这些参考。它帮助我更好地理解这个概念:)
    猜你喜欢
    • 2012-01-17
    • 2020-06-20
    • 1970-01-01
    • 2021-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-04
    • 2019-04-17
    相关资源
    最近更新 更多