解决DialogFragment调用show方法报错问题
程序员文章站
2022-07-15 12:25:10
...
在Android 3.0以后,Google官方推荐使用DialogFragment代替Dialog使用,但是这个有个bug,就是DialogFragment调用show方法会出现
Caused by: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
这个恶心的错误,如何解决呢?
解决方案就是写一个基类继承DialogFragment
public class ResolveShowBugDialogFragment extends DialogFragment {
@Override
public void show(FragmentManager manager, String tag) {
try {
FragmentTransaction ft = manager.beginTransaction();
ft.add(this, tag).addToBackStack(null);
ft.commitAllowingStateLoss();
} catch (IllegalStateException e) {
}
}
boolean mIsStateAlreadySaved = false;
boolean mPendingShowDialog = false;
@Override
public void onResume() {
onResumeFragments();
super.onResume();
}
public void onResumeFragments() {
mIsStateAlreadySaved = false;
if (mPendingShowDialog) {
mPendingShowDialog = false;
showSnoozeDialog();
}
}
@Override
public void onPause() {
super.onPause();
mIsStateAlreadySaved = true;
}
private void showSnoozeDialog() {
if (mIsStateAlreadySaved) {
mPendingShowDialog = true;
} else {
FragmentManager fm = getFragmentManager();
ResolveShowBugDialogFragment snoozeDialog = new ResolveShowBugDialogFragment();
snoozeDialog.show(fm, "BaseDialogFragment");
}
}
}
参考链接:https://*.com/questions/14262312/java-lang-illegalstateexception-can-not-perform-this-action-after-onsaveinstanc 上一篇: 输出所有和为S的连续正数序列
下一篇: 判断字典为输出为null
推荐阅读
-
Java调用shell脚本解决传参和权限问题的方法
-
解决eclipse启动时报错Failed to create the Java Virtural Machine.问题的方法
-
PHP调用存储过程返回值不一致问题的解决方法分析
-
Android 解决WebView调用loadData()方法显示乱码的问题
-
解决eclipse启动时报错Failed to create the Java Virtural Machine.问题的方法
-
python中使用ctypes调用so传参设置遇到的问题及解决方法
-
Android 解决WebView调用loadData()方法显示乱码的问题
-
Android编程中调用Camera时预览画面有旋转问题的解决方法
-
python中使用ctypes调用so传参设置遇到的问题及解决方法
-
C#中WebBrowser.DocumentCompleted事件多次调用问题解决方法