繁体   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