Android: почему это диалоговое окно появляется дважды?

1

У меня есть диалог, который проверяет, включен ли интернет. Если он не включен, отображается всплывающее окно, в котором вы можете включить данные или выйти из приложения. Если вы решите повернуть данные, вы перейдете на страницу настроек, чтобы включить данные. Вот проблема: когда вы нажмете обратно с страницы настроек, диалог все еще присутствует, он не упускается. Вот код:

public void calldialog() {
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setMessage(
            "You need to enable an internet connection in order to use this Chirps:")
            .setCancelable(true)
            .setPositiveButton("Turn on Data",
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int id) {

                            Intent newintent = new Intent(
                                    android.provider.Settings.ACTION_WIRELESS_SETTINGS);
                            newintent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
                            startActivity(newintent);
                            dialog.dismiss();
                        }
                    })
            .setNegativeButton("Exit",new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int id) {
                            Main.this.finish();
                        }
                    });
    builder.show();

}

Когда у меня был только один вариант, диалог функционировал правильно. Но как только я добавляю второй вариант, он заставляет кнопку показывать дважды. Функция проверки интернета, в которой содержится calldialog(), вызывается как в oncreate, так и onresume, которые могут быть частью проблемы.

Теги:
alertdialog
dialog

2 ответа

4
Лучший ответ

Вы вызываете startActivity() перед dialog.dismiss(). Это дает контроль над новым действием.

3

Прежде всего, когда вы запускаете свое приложение в android, действия происходят следующим образом:

запускается активность → onCreate()onResume() → активность.

Когда вы переходите из настройки и возвращаетесь в свое приложение onResume(), вы должны только выполнить проверку onResume().

  • 0
    Это также было полезно, но для другой проблемы я имел отношение к моему вопросу :). Благодарю.
  • 0
    Следует ли проверять настройки, такие как Интернет или Местоположение, в onCreate () или onResume ()?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню