Android studio: диалоговое окно предупреждения вызывает сбой при вызове из меню, но не при вызове с кнопки. Что я делаю не так?

#android #android-studio #android-alertdialog

#Android #android-studio #android-alertdialog

Вопрос:

У меня есть этот метод, который отображает AlertDialog:

 public void showTestDialog() {
    new AlertDialog.Builder(this)
            .setMessage("Message")
            .show();
}
  

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

Когда я вызываю это нажатием кнопки, оно работает нормально…

 public void testButton(View view) {
    showTestDialog();
}
  

Но когда я вызываю его из пункта меню, он выходит из строя через несколько секунд после отображения…

 @Override
public boolean onOptionsItemSelected(MenuItem item) {

    switch (item.getItemId()) {
        case R.id.testDialog:
            showTestDialog();
            return true;
        default:
            return false;
    }
}
  

В окне моей консоли / журнала это строка, которая появляется при нажатии на пункт меню:

D / OpenGLRenderer: завершите Activeanimators в 0x9fa61c80 (MenuPopupWindow $MenuDropDownListView) с дескриптором 0x92d16a80

… и тогда это единственная строка, которая появляется, когда виртуальное устройство внезапно закрывается:

Эмулятор устройства-5554 отключен, мониторинг остановлен.

Вот окно отчета о сбое:

введите описание изображения здесь

У меня уже были самые современные драйверы для моего графического процессора (GTX 1070), но я все равно пошел дальше и переустановил с помощью новой загрузки, но без кубиков. Я занимался этим часами, но безуспешно. Что я делаю неправильно? Я очень новичок в этом. Спасибо!

Комментарии:

1. Странно! Раньше я не сталкивался с такими проблемами. Мне было интересно, каковы настройки памяти для вашего эмулятора? Не могли бы вы предоставить эмулятору достаточно памяти и хранилища, чтобы он мог работать бесперебойно? Вы пробовали запускать свой код на реальном устройстве? Там тоже происходит сбой?

2. @ReazMurshed Я не знаком с тем, как выделить ему память и хранилище. Я также еще не научился работать на реальном устройстве.

Ответ №1:

Создайте диалоговое окно со статическим контекстом, подобным new AlertDialog.Builder(mContext).setMessage("Message").show(); этому mContext, назначьте контекст в методе oncreate.

Комментарии:

1. Я попробовал ваше предложение, но я все равно получаю тот же результат.

Ответ №2:

Определите свой экземпляр AlertDialog в вашем onCreate и просто покажите диалоговое окно при нажатии кнопки меню. Вам также не понадобится дополнительный метод для отображения диалогового окна.

Комментарии:

1. Я тоже пробовал это, но получаю тот же результат. Я инициализировал оповещение в основном классе, настроил все заголовок, сообщение и кнопки в методе onCreate, а затем просто сообщил оповещению «.show ();» при нажатии на пункт меню.