IllegalStateException при использовании DialogFragment

Я только начал использовать DialogFragment из библиотеки поддержки Android и до сих пор нахожу это крайне раздражающим. У меня есть несколько пользовательских AsyncTasks, которые вызываются из разных мест моего приложения. Есть два случая, когда я сталкиваюсь с проблемами с DialogFragments:

  1. При отладке и экран гаснет
  2. Когда я хочу открыть FragmentDialog из onActivityResult()

И то, и другое, по крайней мере, я думаю, довольно распространенные ситуации, и в обоих случаях я получаю

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(), но это не совсем то, что я ищу. Есть ли лучшие решения??

Спасибо Саймон


person SimonSays    schedule 24.08.2012    source источник
comment
Это одна из самых раздражающих проблем, с которыми я сталкивался при разработке Android. У устаревших диалоговых API этой проблемы не было. Все обходные пути такие уродливые. Я все еще не мог найти чистое решение этой проблемы.   -  person Ertan D.    schedule 25.09.2012
comment
И я нет. Я все еще жду, когда кто-нибудь покажет мне чистое решение :-\   -  person SimonSays    schedule 26.09.2012


Ответы (2)


У вас есть ответ на этот другой вопрос: Show DialogFragment from onActivityResult

По сути, это ошибка в библиотеке совместимости.

person Vincent Mimoun-Prat    schedule 11.10.2012

используйте dialog.dismissAllowingStateLoss(); вместо dialog.dismiss();

person Enes    schedule 04.10.2014