当activity被系统因为内存紧张销毁时再重建时,内部的fragment可能会导致显示混乱,尤其是一个activity加多个fragment的界面。
解决办法就是判断savedInstanceState是否为Null,并进行恢复,示例代码如下:
private int saveIndex;//保存的fragment的下标
private boolean isHomeActDestroy;//activity的销毁标识
@Override
protected void onCreate(@Nullable Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
if(savedInstanceState!=null&&savedInstanceState.getBoolean("isHomeActDestroy",false)){
saveIndex = savedInstanceState.getInt("SaveIndex", 0);
isHomeActDestroy=savedInstanceState.getBoolean("isHomeActDestroy",false);
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
Fragment f1 = manager.findFragmentByTag(MapFg.class.getSimpleName());
Fragment f2 = manager.findFragmentByTag(ShopFg.class.getSimpleName());
Fragment f3 = manager.findFragmentByTag(PublishFg.class.getSimpleName());
Fragment f4 = manager.findFragmentByTag(AroundFg.class.getSimpleName());
Fragment f5 = manager.findFragmentByTag(UserFg.class.getSimpleName());
switch (saveIndex){
case 0:
{
if (null==f1){
transaction.add(R.id.fragment_container,new MapFg(),MapFg.class.getSimpleName());
}else {
transaction.show(f1);
}
if (null!=f2)
transaction.hide(f2);
if (null!=f3)
transaction.hide(f3);
if (null!=f4)
transaction.hide(f4);
if (null!=f5)
transaction.hide(f5);
transaction.commitAllowingStateLoss();
}
break;
case 1:
{
if (null==f2){
transaction.add(R.id.fragment_container,new ShopFg(),ShopFg.class.getSimpleName());
}else {
transaction.show(f2);
}
if (null!=f1)
transaction.hide(f1);
if (null!=f3)
transaction.hide(f3);
if (null!=f4)
transaction.hide(f4);
if (null!=f5)
transaction.hide(f5);
transaction.commitAllowingStateLoss();
}
break;
// case 2:
// break;
case 3:
{
if (null==f4){
transaction.add(R.id.fragment_container,new AroundFg(),AroundFg.class.getSimpleName());
}else {
transaction.show(f4);
}
if (null!=f1)
transaction.hide(f1);
if (null!=f2)
transaction.hide(f2);
if (null!=f3)
transaction.hide(f3);
if (null!=f5)
transaction.hide(f5);
transaction.commitAllowingStateLoss();
}
break;
case 4:
{
if (null==f5){
transaction.add(R.id.fragment_container,new UserFg(),UserFg.class.getSimpleName());
}else {
transaction.show(f5);
}
if (null!=f1)
transaction.hide(f1);
if (null!=f2)
transaction.hide(f2);
if (null!=f3)
transaction.hide(f3);
if (null!=f4)
transaction.hide(f4);
transaction.commitAllowingStateLoss();
}
break;
default:
}
}
setContentView(R.layout.act_home);
if (savedInstanceState == null){
getSupportFragmentManager().beginTransaction().add(R.id.fragment_container,new MapFg(),MapFg.class.getSimpleName()).commit();
}
///此处其他代码省略
}
@Override
protected void onSaveInstanceState(Bundle outState)
{
outState.putInt("SaveIndex", saveIndex);
outState.putBoolean("isHomeActDestroy",true);
super.onSaveInstanceState(outState);
}