导航回到FragmentPagerAdapter – >片段是空的

我有一个片段(我将它pagerFragment ),被添加到后台堆栈,并可见。 它拥有一个带有FragmentPagerAdapterviewPagerFragmentPagerAdapter拥有(比方说)两个片段:A和B.

首先添加的片段效果很好。

片段A有一个button,一旦点击,将片段(C)添加到后台。

问题是这样的:如果我添加该片段(C),然后单击返回, pagerAdapter是空的,我不能看到里面的任何片段。

如果我使用hack,并且在pagerFragmentonDestroyView()销毁子片段(A和B onDestroyView() ,这就解决了这个问题,尽pipe我不想使用这个入侵。

任何想法可能是什么问题?

我有同样的问题。 对我来说这个解决scheme很简单:

在onCreateView我有:

 // Create the adapter that will return a fragment for each of the three // primary sections of the app. mSectionsPagerAdapter = new SectionsPagerAdapter(getActivity() .getSupportFragmentManager()); 

其中SectionPageAdapter是这样的:

 class SectionsPagerAdapter extends FragmentPagerAdapter { ... } 

改成getSupportFragmentManager之后

 mSectionsPagerAdapter = new SectionsPagerAdapter(getChildFragmentManager()); 

它开始工作! 希望这可以帮助。

这听起来像你使用嵌套片段,因为你的ViewPager是在一个PagerFragment内。 你有没有把getChildFragmentManager()传递给你的FragmentPagerAdapter的构造函数? 如果不是,你应该。

我不认为你需要一个FragmentStatePagerAdapter,但我会给它一个处理,因为它处理保存和恢复Fragment状态。 你的onDestroyView()黑客工作的事实使我认为你可能需要一个FragmentStatePagerAdapter。

这也可能与FragmentPagerAdapter添加Fragments的方式有关。 FragmentPagerAdapter不会将碎片添加到堆栈中。 试想一下,如果你在ViewPager中添加了10多个页面,并且用户通过它们。 用户将需要回击11次,才能退出应用程序。

它也可能与这篇文章有关: 嵌套片段和后端堆栈 。

此外,我不知道你要添加片段C。 你是否将其添加到ViewPager相同的容器?

至less你有几个select来调查。 在这些情况下,我喜欢debugging到Android SDK源代码,看看是什么导致了行为。 我build议抓住AOSP源,并添加框架/支持和框架/基地作为您的SDK来源。 这是理解正在发生的事情的唯一真正方法,并避免在事情发生之前进行随机更改。