ProgressDialog во фрагменте запускает метод onPause активности хоста.

Итак, я провел некоторое исследование своего кода, связанного с ошибкой (называемой фиксацией в onPostExecute асинхронной задачи, иногда выдает исключение IllegalStateException), и я обнаружил, что когда запускаю свою асинхронную задачу из своего фрагмента и показываю прогресс диалоговое окно, моя активность вызывает его метод onPause, который каскадно переходит к соответствующему onPause в моем фрагменте. Я просмотрел API и здесь, но не нашел ответов. Почему onPause в моей деятельности называется? Деятельность не обязательно переходит в фоновый режим, не так ли?


person user1371391    schedule 15.05.2014    source источник


Ответы (1)


Когда ваша активность переходит в фоновый режим, вызывается метод onStop(). Однако, когда вы показываете диалоговое окно, действие не отображается в верхней части вашего представления, поэтому вызывается метод onPause().

Если у вас есть что-то, что вы хотите сделать в своем методе onPause(), что не должно выполняться, когда вы хотите показать свой диалог, вам нужно установить флаг и выполнять этот код только в том случае, если флаг истинен:

@Overrides
public void onPause() {
    super.onPause();
    if (myFlag) {
        myMethod();
    }
}

Вы переключаете свой флаг, когда показываете свой диалог и когда закрываете его.

person DDsix    schedule 15.05.2014
comment
Как насчет того, чтобы я хотел сделать что-то до onResume. Как я уже упоминал, я получаю исключение IllegalStateException из-за попытки зафиксировать транзакцию Fragment в onPostExecute моей AsyncTask. Есть ли разумный способ отложить фиксацию до onResume? - person user1371391; 15.05.2014