Диалоговое окно предупреждения не отображается

#android #dialog #alert

#Android #диалоговое окно #предупреждение

Вопрос:

Привет всем, я создаю диалоговое окно предупреждения в Android, нажав кнопку. Я использовал свойство onClick для XML и вызывающей функции. Мой код

 public void selectPhoneType(View view)
{
    String [] item = {"Home", "Work", "Mobile", "Work Fax", "Home Fax", "Pager", "Other", "Custom"};
    AlertDialog.Builder builder = new AlertDialog.Builder(getApplicationContext());
    builder.setTitle("Select Label");
    AlertDialog alert = builder.create();
    alert.show();}
  

но этот код не отображает предупреждение и выдает ошибку типа

 BadTokenException: Unable to add window -- token null is not for an application. 
  

Пожалуйста, скажите мне, что не так с этим кодом.

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

1. попробуйте: создать AlertDialog. Конструктор (это)

2. привет, спасибо за его работу, но не могли бы вы объяснить мне, в чем разница между этим и getAplicationContext?

Ответ №1:

 new AlertDialog.Builder(getApplicationContext());
  

Я думаю, что это проблема. Вы пробовали:

 new AlertDialog.Builder(YourActivityClassName.this);
  

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

1. да, я не пробовал это, но после выполнения этого он работает. Как? Пожалуйста, объясните мне.

2. Вы добавляли контекст всего приложения, а не конкретное действие, которое вы хотели показать в диалоговом окне. В нижней части этого сообщения в блоге есть немного больше объяснений. tech.shantanugoel.com/2010/07/08 /…

3. Нет проблем. Рад быть полезным

4. Хотелось бы, чтобы была другая кнопка для галочки, чтобы я мог ее использовать. Одно из лучших решений. 🙂

Ответ №2:

Передача requireActivity() вместо requireContext() сработала для меня ..!! Я думаю, что для этого требуется контекст активности !!.

Ответ №3:

Если вы вызываете диалоговый код в фоновом потоке, он не будет работать. Вы должны вызвать связанный с пользовательским интерфейсом код в основном потоке, если вы этого не делаете, он не покажет вам диалоговое окно.

  1. Если вы хотите отобразить диалоговое окно в фоновой задаче, вместо этого используйте обработчик.

    новый обработчик().post(новый запускаемый (){ ShowDialog(); })

  2. Убедитесь create() , что и show() метод вызывается.

  3. Никогда не забывал 1-й и 2-й пункт.