android DialogFragment 出现 Can not perform this action after onSaveInstanceState
在使用 android 的 DialogFragment 的时候如果实在 Activity 在后台的时候调用 dismiss 函数的时候会出现 Can not perform this action after onSaveInstanceState 的异常,这个异常跟 activity 状态被保存之后又尝试提交一个 FragmentTransaction,原因是因为 DialogFragment 在调用 dismiss 函数的时候需要提交一个 FragmentTransaction 事务,但是在 onSaveInstanceState () 函数调用之后,提交事务就会导致状态丢失,这样就会出现异常。不同的系统显示异常的方式不同
private static final String BUNDLE_FRAGMENTS_KEY = “android:support:fragments”;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
if (savedInstanceState != null && this.clearFragmentsTag()) {
//重建时清除 fragment的状态
savedInstanceState.remove(BUNDLE_FRAGMENTS_KEY);
}
super.onCreate(savedInstanceState);
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
if (outState != null && this.clearFragmentsTag()) {
//销毁时不保存fragment的状态
outState.remove(BUNDLE_FRAGMENTS_KEY);
}
}
protected boolean clearFragmentsTag() {
return true;
}