替换的ViewPager和BackStack的生命周期?

NLe*_*may 7 android android-fragments android-viewpager android-listfragment android-nested-fragment

我真的搞砸了Android ViewPager的生命周期,我开始认为我的应用程序结构有问题.如果我能做到以下几点,我想要确认:

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

这是我用来用新的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();
Run Code Online (Sandbox Code Playgroud)

从那里,一切都很好.但是,如果用户单击后退按钮,我会遇到以下情况:

  • ViewPager正在重新加载(来自onCreateView),但里面的ListFragment不会显示.看起来我的ListFragment的对象仍然存在,但似乎它们失去了视图,并且没有调用onCreateView来重新创建它(因为ViewPager出来时对象没有睡觉).

我现在不在这里发布更多代码,因为我的目的是知道我想要做的是否是Android的思维方式.我是否必须与Android SDK进行对抗以存档我想要做的事情?

NLe*_*may 23

好吧,正如你所看到的,我不是Android用户(我对iOS上的UI了解得更多).这就是为什么我感到困惑.

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

对于我的问题,这不是一个结构问题.创建FragmentStatePagerAdapter时,请确保使用getChildFragmentManager()而不是getFragmentManager()!

ViewPagerAdapter adapter = new ViewPagerAdapter(getChildFragmentManager());
Run Code Online (Sandbox Code Playgroud)

  • 救了我的命.谢谢. (3认同)