解決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());

    }
相關文章
相關標籤/搜索