【问题标题】:IllegalStateException when using DialogFragment使用 DialogFragment 时出现 IllegalStateException
【发布时间】:2023-03-18 00:40:02
【问题描述】:

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

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

至少我认为这两种情况都很常见,在这两种情况下我都会得到一个

java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState

这就是我的 AsyncTask 的结构:

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

谢谢 西蒙

【问题讨论】:

  • 这是我在Android开发中遇到的最烦人的问题之一。已弃用的对话框 API 没有此问题。所有的解决方法都很丑陋。我仍然找不到这个问题的干净解决方案。
  • 我也没有。我仍在等待有人向我展示一个干净的解决方案:-\

标签: android android-dialogfragment


【解决方案1】:

使用dialog.dismissAllowingStateLoss(); 代替dialog.dismiss();

【讨论】:

    【解决方案2】:

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

    基本上是bug in the compatibility library

    【讨论】:

      猜你喜欢
      • 2019-06-02
      • 1970-01-01
      • 2016-08-28
      • 2016-11-15
      • 2013-08-27
      • 1970-01-01
      • 2016-01-20
      • 1970-01-01
      • 2015-02-22
      相关资源
      最近更新 更多