9

我刚开始使用 android 支持库中的 DialogFragment,到目前为止发现它非常烦人。我有一些自定义 AsyncTasks 从我的应用程序的不同位置调用。有两种情况下我遇到了 DialogFragments 的问题:

  1. 调试和屏幕关闭时
  2. 当我想从 onActivityResult() 打开一个 FragmentDialog

至少我认为,两者都是相当常见的情况,在这两种情况下,我都得到了

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() 中打开对话框,但这并不是我真正想要的。有没有更好的解决方案??

谢谢西蒙

4

2 回答 2

5

使用dialog.dismissAllowingStateLoss();而不是dialog.dismiss();

于 2014-10-04T23:12:44.517 回答
1

你有一个关于另一个问题的答案:Show DialogFragment from onActivityResult

基本上是兼容性库中的一个错误

于 2012-10-11T14:57:10.567 回答