我有一个带有 BottomNavigationView 的活动,该活动在3个片段之间切换。重新创建活动后,我的三个片段会自动恢复。因此,我通过OnCreate
检查来保护活动savedInstanceState == null
中片段的创建,以确保在已创建/已还原的片段之上不添加其他片段。
if (savedInstanceState == null) {
// Fragments are automatically restored when activity is recreated
fragmentManager.beginTransaction().add(R.id.content_main, mTrendingFragment, "3").hide(mTrendingFragment).commit();
fragmentManager.beginTransaction().add(R.id.content_main, mFavoriteFragment, "2").hide(mFavoriteFragment).commit();
fragmentManager.beginTransaction().add(R.id.content_main, mUpcomingViewPagerFragment, "1").commit();
}
现在,问题是当我在一段时间后从后台返回到我的活动并尝试切换到另一个片段时,它不起作用。即使单击 BottomNavigationView 中的另一个片段菜单项,主页片段也始终显示。它不会切换片段。为什么会发生这种情况,我该如何解决此问题?
答案 0 :(得分:1)
执行此操作时,您仍然会在onCreate()中无条件创建全新的实例:
// Default fragment
mUpcomingViewPagerFragment = new UpcomingViewPagerFragment();
mFavoriteFragment = new FavoriteFragment();
mTrendingFragment = new TrendingFragment();
还原实例时(并且savedInstanceState
不等于null
),您永远不会将这些全新的片段添加到FragmentManager中,因此调用{{1} },hide()
等与这些片段无关。
相反,您需要从FragmentManager中检索那些Fragment,以便您的实例变量与FragmentManager知道的Fragments相符:
show()