之前写过了一篇关于Fragment重叠的问题,
Fragment重叠,使用show和hide控制显示和隐藏界面重叠问题
但这次在车机上遇到了一个Fragment重叠的问题,以上的几种方法都解决不了,所以来记录一下;
该车机在切换到后台后会回调 onSaveInstanceState 方法,再次打开时没有走onCreate方法,所以在onSaveInstanceState方法中把当前显示的fragment删除后,从后台切换回来就是空白页了;
车机在换肤后(切换黑夜和白天模式)会回调 onSaveInstanceState 和 onCreate 方法,所以就从onCreate方法下手,下面是代码
java
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(savedInstanceState != null){
hideFragment();
}
setContentView(R.layout.activity_main);
}
private void hideFragment() {
FragmentManager supportFragmentManager = getSupportFragmentManager();
F1Fragment f1 = (F1Fragment) supportFragmentManager.findFragmentByTag(F1Fragment.class.getName());
F2Fragment f2 = (F2Fragment) supportFragmentManager.findFragmentByTag(F2Fragment.class.getName());
F3Fragment f3 = (F3Fragment) supportFragmentManager.findFragmentByTag(F3Fragment.class.getName());
F4Fragment f4 = (F4Fragment) supportFragmentManager.findFragmentByTag(F4Fragment.class.getName());
FragmentTransaction transaction = supportFragmentManager.beginTransaction();
if (f1!=null) transaction.hide(f1);
if (f2!=null) transaction.hide(f2);
if (f3!=null) transaction.hide(f3);
if (f4!=null) transaction.hide(f4);
transaction.commit();
}
然后在 add Fragment时设置Tag就可以了;
java
transaction.add(R.id.fl, targetFragment ,targetFragment.getClass().getName()).commit();
根据Tag获取Activity销毁前的Fragment,并做处理。这样在Activity重启后会判断之前保存的是否有Fragment,有的话就把之前的隐藏就可以了;