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

时间:2013-03-12 19:38:04

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

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

  • 我有一个显示一些标签的应用程序。其中一个选项卡显示的是ViewPager,其中有两个ListFragments。那些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进行对抗以存档我想要做的事情?

1 个答案:

答案 0 :(得分:23)

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

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

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

ViewPagerAdapter adapter = new ViewPagerAdapter(getChildFragmentManager());