【发布时间】:2013-11-03 18:28:28
【问题描述】:
我有一个DialogFragment,它从后台线程显示在屏幕上。当我旋转屏幕时,我的应用程序崩溃了。下面是代码:
public void showDialog(DialogFragment dialog) {
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.addToBackStack(null);
dialog.show(ft, "dialog");
}
这给了我以下错误:
10-24 13:20:51.490: E/AndroidRuntime(3038): java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
在寻找关于 SO 和this 文章的答案后,我尝试这样做:
public void showDialog(DialogFragment dialog) {
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.addToBackStack(null);
ft.add(dialog, "dialog");
ft.commitAllowingStateLoss();
}
但是有了这个,我在ft.commitAllowingStateLoss()得到以下错误
10-24 13:26:58.890: E/AndroidRuntime(3765): java.lang.IllegalStateException: Activity has been destroyed
知道我错过了什么吗?
【问题讨论】:
-
不要将对话框添加到后台堆栈。只需调用 dialog.show(getSupportFragmentManager(), "dialog");
-
如果我这样做,我会收到
java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState错误。 -
您何时何地调用 showDialog?
-
我从后台运行的线程中调用它。
-
@Intern 如果您的对话框成功显示并且旋转后抛出异常,请参阅我的答案。顺便说一句,您只能显示来自 UI 线程的(对话框)片段。我猜你说的是 asyncTask 的 onPostExecute 方法,“我从后台运行的线程中调用它”。
标签: android android-dialogfragment illegalstateexception