[英]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.