簡體   English   中英

彈出堆棧時的Android異常

[英]Android exception when popping backstack

這是這些問題的后續問題: 從堆棧彈出片段時, saveInstanceState()之后的popBackStack() 應用程序在后台崩潰

我正在創建一個使用服務的應用程序,並對應用程序創建的事件做出反應。 其中一個事件在一個片段內被調用,並像這樣從后台彈出:

getSupportFragmentManager().popBackStack(stringTag, FragmentManager.POP_BACK_STACK_INCLUSIVE);

當應用程序在前台運行時,它可以正常工作。 當應用程序在后台運行時,

IllegalStateException:在onSaveInstanceState之后無法執行此操作

我已經嘗試使用空方法覆蓋onSaveInstanceState

為什么僅在應用程序在后台時才出現此異常,我該如何解決?

嘗試這樣的事情。

public abstract class PopActivity extends Activity {

        private boolean mVisible; 

       @Override
        public void onResume() {
            super.onResume();
            mVisible = true;
        }

        @Override
        protected void onPause() {
            super.onPause();
            mVisible = false;
        }

        private void popFragment() {
            if (!mVisible) {
                return;
            }

            FragmentManager fm = getSupportFragmentManager();
            fm.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
        }
    }

當您在恢復應用程序時單獨實現上述代碼時,您會發現自己實際上是一個要彈出的片段。 您可以使用以下摘錄來解決此問題:

public abstract class PopFragment extends Fragment {

    private static final String KEY_IS_POPPED = "KEY_IS_POPPED";
    private boolean mPopped;

    @Override
    public void onSaveInstanceState(Bundle outState) {
        outState.putBoolean(KEY_IS_POPPED, mPopped);
        super.onSaveInstanceState(outState);
    }

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (savedInstanceState != null) {
            mPopped = savedInstanceState.getBoolean(KEY_IS_POPPED);
        }
    }

    @Override
    public void onResume() {
        super.onResume();
        if (mPopped) {
            popFragment();
        }
    }

    protected void popFragment() {
        mPopped = true;
        // null check and interface check advised
        ((PopActivity) getActivity()).popFragment();
    }
}

原作者

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM