8

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

  • 我有一个显示一些标签的应用程序。其中一个选项卡显示了一个 ViewPager,其中有两个 ListFragment。这些 ListFragment 是在 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 对抗才能归档我想做的事情?

4

1 回答 1

26

好吧,如您所见,我不是 Android 用户(我对 iOS 上的 UI 了解更多)。这就是为什么我很困惑。

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

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

ViewPagerAdapter adapter = new ViewPagerAdapter(getChildFragmentManager());
于 2013-03-13T13:40:28.577 回答