解决Fragment的重叠问题

 

当使用add()和 hide()操做fragment时候,fragment 只是设为gone的状态,并无被销毁,因此会出现当Activity被回收时重启后fragment重叠问题。咱们都知道FragmentActivity被销毁时会执行java

onSaveInstanceState(Bundle outState)

可是系统并无给咱们保存Fragment的显示状态 isHidden()ide

因此咱们能够手动维护一个mHidden便可。 在onSaveInstanceState()中设置fragment的mHidden状态,最后再在onCreate()中取出便可。直接上代码,我已经把它封装在了一个baseFragment中了this

@Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        Log.d(TAG,"onCreate");
        super.onCreate(savedInstanceState);
        if(savedInstanceState!=null){
            boolean flag = savedInstanceState.getBoolean("flag");
            FragmentTransaction transaction = getFragmentManager().beginTransaction();
            if(flag){ // 若是隐藏掉,
                transaction.show(this);
            }else{
                transaction.hide(this);
            }

            transaction.commit();
        }

    }


    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        Log.d(TAG,"isHidden---" + isHidden());
        outState.putBoolean("flag",isHidden());

    }
相关文章
相关标签/搜索