天天看點

Android Acitivity狀态儲存和恢複

問題背景:

目前MainActivity添加了四個Fragment分别為AppHomeFrament,AppEditFragment,AppWorksFragment和AppSetupFragment,而在AppSetupFragment中有一個切換夜間模式的功能使用了activity.recreate();導緻頁面重新建立,并且回到了第一個Fragment(AppWorksFragment)頁面,現在需求是需要切換夜間模式之後停留在第四個Fragmnet(AppSetupFragment),是以需要定義一個标志讓MainActivity重新建立之後,預設回到第四個Fragmnet(AppSetupFragment)。

MainActivity中:

private int indexPage = 0;//預設為第一個Fragment,當使用者在第四個Fragment時候,需要設定為3

   @Override
    protected void onSaveInstanceState(@NonNull Bundle outState) {
        super.onSaveInstanceState(outState);
        LogUtil.i(TAG, "1onSaveInstanceState:" + indexPage);
        outState.putInt("page_index", indexPage);
    }


    @Override
    protected void onRestoreInstanceState(@NonNull Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
        indexPage = savedInstanceState.getInt("page_index", 0);
        LogUtil.i(TAG, "1onRestoreInstanceState:" + indexPage);
        if (indexPage == 3) {
        //具體的顯示方法
            onSelectFragment(setupFragment);
        }
    }

           

通過onSaveInstanceState儲存狀态和資料,然後通過onRestoreInstanceState在此次讀取資料,就可以讓Activity重新建立之後依然能夠回到第四個Fragment。