当我在上面替换 Fragment 时,如何在 TabLayout 中保留 ViewPager 的状态?

How do I retain the state of my ViewPager in my TabLayout when I'm replacing a Fragment on top of it?

我有一个 activity,它使用了一堆不同的片段。我有一个 TabContainer 片段,它包含一个 TabLayout,它使用 ViewPager 来处理选项卡导航。每个选项卡都是它自己的片段。

在我的一个选项卡中,我想点击并将一个片段放在我的选项卡片段之上。这是一个 "details" 类型的屏幕,所以我不希望选项卡可见。我正在使用它并且它按预期工作:

fragmentTransaction.replace(android.R.id.content, fragmentToDisplay).addToBackStack(null).commit();

现在,当我向后导航时,我的选项卡中的内容是空的。该选项卡旁边的选项卡中的内容也是空的。当我离开两个选项卡时,将重新创建内容和正常功能 returns。为什么当我删除我的 "detail" 片段时最初没有在选项卡上重新创建内容?

事实证明,我只是没有将正确的 FragmentManager 传递给 FragmentStatePagerAdapter

我需要在 Fragment 上调用 getChildFragmentManager(),而不是在 activity 上调用 getSupportFragmentManager()

感谢这两个帖子的回答: Fragment in ViewPager not restored after popBackStack 和:Replacing ViewPager with Fragment - Then Navigating Back