android - 从后台返回时,Android 片段被置于前一个片段之上
问题描述
在我的 MainActivity 中,我有三个片段。还有一个 BottomNavigationView 处理要显示的片段。
这就是我在 MainActivity 的 OnCreate 中的内容:
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();
现在不幸的是,当我从后台回到我的应用程序时,这 3 个片段被放置在旧片段之上,这会产生一种奇怪的行为,导致 UI 出现故障
当我单击 BottomNavigationView 的项目时,这就是我显示片段的方式:
fragmentManager.beginTransaction().hide(mCurrentFragment).show(mUpcomingViewPagerFragment).commit();
mCurrentFragment = mUpcomingViewPagerFragment;
我该如何解决这种行为?
解决方案
重新创建活动时会自动恢复片段。因此,您所做的任何设置onCreate()
都应进行if (savedInstanceState == null)
检查,以确保您不会在已恢复的片段之上添加额外的片段。
if (savedInstanceState == null) {
// Create new Fragment instances
mTrendingFragment = new TrendingFragment();
mFavoriteFragment = new FavoriteFragment();
mUpcomingViewPagerFragment = new UpcomingViewPagerFragment();
// And add those new instances to the FragmentManager
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();
} else {
// Get the already existing fragments from FragmentManager
mTrendingFragment = (TrendingFragment) fragmentManager.findFragmentByTag("3");
mFavoriteFragment = (FavoriteFragment) fragmentManager.findFragmentByTag("2");
mUpcomingViewPagerFragment = (UpcomingViewPagerFragment) fragmentManager.findFragmentByTag("1");