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