使用DialogFragment时出现IllegalStateException

时间:2012-08-24 21:22:53

标签: android android-dialogfragment

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

  1. 调试时屏幕关闭
  2. 当我想从onActivityResult()
  3. 打开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()中打开对话框,但这不是我真正想要的对于。有没有更好的解决方案?

    由于 西蒙

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:1)

你对另一个问题得到了答案:Show DialogFragment from onActivityResult

基本上是bug in the compatibility library