【问题标题】:Lifecycle of a replaced ViewPager and BackStack?被替换的 ViewPager 和 BackStack 的生命周期?
【发布时间】:2013-03-12 19:38:03
【问题描述】:

我真的搞砸了 android ViewPager 的生命周期,我开始认为我的应用程序的结构有问题。因此,如果我可以执行以下操作,我想确认一下:

  • 我有一个显示一些选项卡的应用程序。其中一个选项卡显示了一个 ViewPager,其中有两个 ListFragment。那些 ListFragments 在 ViewPager 的 onCreate 事件中创建。
  • 当您单击其中一个 ListFragments 中的项目时,它会将整个 ViewPagerFragment 替换为不同的片段(这是另一个 ListFrament)。

这是我用新的 ListFragment 替换 ViewPager 的代码

FragmentManager fm = getFragmentManager();
android.support.v4.app.FragmentTransaction ft = fm.beginTransaction();

ft.replace(R.id.container, new RequestForm(requestsList.get(itemIndex)));
ft.addToBackStack(null);
ft.commit();

从那里开始,一切正常。但是,如果用户点击后退按钮,我会得到以下情况:

  • ViewPager 重新加载正常(来自 onCreateView),但 ListFragment 里面不会出现。看起来我的 ListFragment 的对象还在 活着,但似乎他们失去了视野,而 onCreateView 不是 调用以重新创建它(因为对象在 ViewPager 已退出)。

我暂时不在这里发布更多代码,因为我的目的是了解我正在尝试做的事情是否符合 Android 的思维方式。我是否必须与Android SDK对抗才能归档我想做的事情?

【问题讨论】:

    标签: android android-fragments android-viewpager android-listfragment android-nested-fragment


    【解决方案1】:

    嗯,如您所见,我不是 Android 用户(我对 iOS 上的 UI 了解更多)。这就是我困惑的原因。

    在查看了不同的应用程序后,我发现 Gmail 和 Google Play 的导航确实有点像我的(用新片段替换 ViewPager,而不创建新活动)。

    对于我的问题,这不是结构问题。创建 FragmentStatePagerAdapter 时,请务必使用 getChildFragmentManager() 而不是 getFragmentManager()!

    ViewPagerAdapter adapter = new ViewPagerAdapter(getChildFragmentManager());
    

    【讨论】:

    • 遇到了与上述完全相同的问题,通过传入 getChildFragmentManager 设置适配器解决了该问题。谢谢!现在必须弄清楚如何存储上次查看的位置并在弹出回栈时恢复它;
    • 救了我的命。谢谢。
    • @MarianPaździoch stackoverflow.com/a/14775322/2900182 这可能会回答你的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-20
    • 2023-03-13
    • 1970-01-01
    • 2011-09-25
    相关资源
    最近更新 更多