Фрагмент, не привязанный к активности в AlertDialog

#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();