导航回FragmentPagerAdapter - >片段为空

Ami*_*hai 56 android android-fragments android-viewpager fragmentpageradapter back-stack

我有一个片段(我会称之为pagerFragment),它被添加到后台并且可见.它拥有viewPager一个FragmentPagerAdapter.在FragmentPagerAdapter持有(假设)两个片段:A和B.

首先添加片段效果很好.

片段A有一个按钮,一旦点击,就会在后台堆叠中添加一个片段(C).

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

如果我使用hack,并破坏pagerFragments中的子片段(A和B)onDestroyView(),这解决了问题,虽然我不想使用这个hack.

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

Mik*_*rer 89

我有同样的问题.对我来说解决方案很简单:

在onCreateView我有:

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

其中SectionPageAdapter是这样的:

class SectionsPagerAdapter extends FragmentPagerAdapter {
...
}
Run Code Online (Sandbox Code Playgroud)

将getSupportFragmentManager更改为

mSectionsPagerAdapter = new SectionsPagerAdapter(getChildFragmentManager());
Run Code Online (Sandbox Code Playgroud)

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

  • 任何人都可以解释为什么`getSupportFragmentManager()`不起作用,但`getChildFragmentManager()`有效吗?按下后视图如何被"嵌套"?这有副作用吗? (9认同)
  • @SachinShelke然后你需要使用支持库.;)http://developer.android.com/reference/android/support/v4/app/Fragment.html#getChildFragmentManager%28%29 (5认同)
  • getChildFragmentManager()仅适用于17个以上的android sdk.:( (3认同)
  • 天啊,我在这个问题上花了3个小时.此修复工作完美.我失去了几个小时,我再也见不到了.FML (3认同)

Pie*_*tte 16

听起来您正在使用嵌套片段,因为您的ViewPager在PagerFragment中.您是否已将getChildFragmentManager()传递给FragmentPagerAdapter的构造函数?如果没有,你应该.

我不认为你需要一个FragmentStatePagerAdapter,但我会给它一个镜头,因为它处理保存和恢复Fragment状态.你的onDestroyView()hack工作的事实让我觉得你可能想要一个FragmentStatePagerAdapter.

它也可能与FragmentPagerAdapter添加Fragments的方式有关.FragmentPagerAdapter不会将片段添加到Backstack.想象一下,如果您的ViewPager中添加了10多个页面,并且用户可以浏览它们.用户需要回击11次才能退出应用程序.

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

另外我不确定你要将片段C添加到.您是否将其添加到与ViewPager相同的容器中?

好吧,至少你有一些选择可以调查.在这些情况下,我喜欢调试Android SDK源代码,看看是什么导致了这种行为.我建议抓住AOSP源并添加框架/支持和框架/ base作为SDK源.这是理解正在发生的事情的唯一真实方式,并避免在事情发生之前进行随机更改.