#android #android-fragments
#Android #android-фрагменты
Вопрос:
Есть идеи, почему у меня возникает исключение недопустимого состояния с этим блоком кода?
mDialog.setButton(AlertDialog.BUTTON_POSITIVE, "OK",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
if (isAdded()) {
Intent viewIntent = new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivity(viewIntent);
dialog.dismiss();
}
}
});
Это потому, что я закрываю диалоговое окно после запуска нового действия?
Комментарии:
1. Вы должны вставить свою трассировку стека, чтобы добавить больше информации об ошибке.
Ответ №1:
startActivity(viewIntent);
dialog.dismiss();
replace with below
dialog.dismiss();
startActivity(viewIntent);
Это потому, что я закрываю диалоговое окно после запуска нового действия?
Ответ: Да
Ну, активность и диалог разные.Активность имеет диалог, поэтому без активности диалоги не будут иметь никакого значения.(Только активность, которая контролирует пользовательский интерфейс, а не диалог).Когда вы запускаете новую активность, все состояние активности сохраняется в стеке активности, но стек не может вызывать состояния диалога, поскольку он не является частью пользовательского интерфейса activity. (Диалог может существовать только в контексте текущей активности). Если какие-либо диалоги отображаются каким-либо действием, перед завершением или получением сохраненных в стеке действий диалоговых окон необходимо удалить из пользовательского интерфейса.
Комментарии:
1. так это действительно закрытие диалога после запуска нового действия?
2. Нет .. Вы должны сначала закрыть диалоговое окно, чтобы начать новую активность
3. на самом деле я хотел спросить, действительно ли проблема заключается в закрытии диалогового окна после запуска нового действия. Если да, можете ли вы объяснить, почему?
4. о .. хорошо .. хорошо, как только вы вызываете «startNewActivity», это действие в основном переходит в состояние «activitystack», и базовая операционная система Android пытается сохранить свое состояние (здесь состояние означает пользовательский интерфейс или просмотр содержимого). Диалог также является компонентом пользовательского интерфейса, но единственное, что у него есть с activity, — это то, к кому он должен быть привязан, всегда activity. И диалог может быть активным, когда активность имеет свое состояние в пользовательском интерфейсе (присутствует на экране).
5. Извините, но все равно не понимаю. Знаете ли вы какие-либо блоги, документы и т. Д., Которые я могу прочитать по этой теме?
Ответ №2:
Просто замените
dialog.dismiss();
с
mDialog.dismiss();