我刚开始使用Android支持库中的DialogFragment,到目前为止发现它非常烦人。我有一些从我的应用程序中的不同位置调用的自定义AsyncTasks。有两种情况我遇到了DialogFragments的问题:
至少我认为两者都是相当普遍的情况,在这两种情况下我都得到了
java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
这就是我的AsyncTasks的结构:
private class UploadImageAsyncTask extends AsyncTask<Void, Void, Image> {
private ProgressDialogFragment dialog;
@Override
protected void onPreExecute() {
super.onPreExecute();
FragmentManager fm = getSupportFragmentManager();
dialog = new ProgressDialogFragment();
dialog.show(fm, "ProgressDialogFragment");
}
@Override
protected Image doInBackground(Void... params) {
...
}
@Override
protected void onPostExecute(Image result) {
super.onPostExecute(result);
dialog.dismiss();
...
}
}
}
我知道我可以设置一个设置来防止屏幕在调试时进入睡眠状态,我可以在onActivityResult()中设置一个标志,然后在onStart()中打开对话框,但这不是我真正想要的对于。有没有更好的解决方案?
由于 西蒙
答案 0 :(得分:4)
使用dialog.dismissAllowingStateLoss();
代替dialog.dismiss();
答案 1 :(得分:1)
你对另一个问题得到了答案:Show DialogFragment from onActivityResult