从后台返回时,Android片段被置于上一个片段的顶部

时间:2019-06-27 17:09:37

标签: android android-fragments

在我的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; 

如何解决此问题?

1 个答案:

答案 0 :(得分:3)

重新创建活动时,片段会自动恢复。因此,在onCreate()中进行的任何设置都应进行if (savedInstanceState == null)检查,以确保您不会在已还原的片段之上添加其他片段。

if (savedInstanceState == null) {
    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();
}