dialog.show(getSupportFragmentManager(), "my_dialog");Can not perform this action after onSaveInstanceState报错
时间: 2024-02-01 11:02:37 浏览: 52
mfcDialog.zip_DEMO_MFCDialog.h
5星 · 资源好评率100%
这个错误通常发生在尝试在 `Activity` 或 `Fragment` 已经保存其状态后执行 `commit()` 或 `commitAllowingStateLoss()` 操作时。这样做会导致应用程序崩溃。
解决方法是在 `onSaveInstanceState()` 方法中保存状态之前,先判断是否已经执行了 `commit()` 或 `commitAllowingStateLoss()` 操作。如果已经执行,则应该使用 `commitNow()` 或 `commitNowAllowingStateLoss()` 方法立即提交事务,而不是等待下一次活动或片段的生命周期方法。
示例代码:
```java
if (!isStateSaved()) {
dialog.show(getSupportFragmentManager(), "my_dialog");
} else {
getSupportFragmentManager().beginTransaction()
.add(dialog, "my_dialog")
.commitNowAllowingStateLoss();
}
```
另外,还需要确保在 `onDestroy()` 方法中删除对话框,以便在重新创建 `Activity` 或 `Fragment` 时不会出现重复的对话框:
```java
@Override
protected void onDestroy() {
super.onDestroy();
if (dialog != null && dialog.isAdded()) {
dialog.dismiss();
}
}
```
阅读全文