Вызывает диалоговое окно «Невозможно добавить окно - нулевой токен не для приложения» с getApplication () в качестве контекста

Потому что его JavaScript такой. Ознакомьтесь со всеми связанными вопросами в правой части этой страницы.

639
задан Community 23 May 2017 в 10:31
поделиться

8 ответов

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

Используйте runOnUiThread() в этом случае.

2
ответ дан Hossein Golshani 23 May 2017 в 10:31
поделиться

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

Например, если у вас есть TabActivity в качестве хоста с двумя вкладками, и каждая вкладка является другим действием, и если вы попытаетесь создать диалог из одной из вкладок (действий) и если вы используете «this», то вы получите исключение , В этом случае диалог должен быть связан с активностью хоста, на котором размещено все и видно. (Вы можете сказать наиболее видимый контекст родительской активности)

Я не нашел эту информацию ни в одном документе, но пытался. Это моё решение без сильного фона, если кто-то с более известными знаниями, не стесняйтесь комментировать.

5
ответ дан Engin OZTURK 23 May 2017 в 10:31
поделиться

Если вы находитесь за пределами действия, то вам нужно использовать в своей функции «NameOfMyActivity.this» как действие, например:

public static void showDialog(Activity activity) {
        AlertDialog.Builder builder = new AlertDialog.Builder(activity);
        builder.setMessage("Your Message")
        .setPositiveButton("Yes", dialogClickListener)
        .setNegativeButton("No", dialogClickListener).show();
}


//Outside your Activity
showDialog(NameOfMyActivity.this);
6
ответ дан oabareload 23 May 2017 в 10:31
поделиться

***** Котлин версия *****

Вы должны передать this@YourActivity вместо applicationContext или baseContext

14
ответ дан MilaDroid 23 May 2017 в 10:31
поделиться

в Активность просто использовать:

MyActivity.this

в Фрагмент:

getActivity();
22
ответ дан Mahmoud Ayman 23 May 2017 в 10:31
поделиться
android.support.v7.app.AlertDialog.Builder builder = new android.support.v7.app.AlertDialog.Builder(getWindow().getDecorView().getRootView().getContext());

builder.setTitle("Confirm");
builder.setMessage("Are you sure you want delete your old account?");

builder.setPositiveButton("YES", new DialogInterface.OnClickListener() {

    public void onClick(DialogInterface dialog, int which) {
        //Do nothing but close the dialog



        dialog.dismiss();

    }
});

builder.setNegativeButton("NO", new DialogInterface.OnClickListener() {

    @Override
    public void onClick(DialogInterface dialog, int which) {

        //Do nothing
        dialog.dismiss();
    }
});

android.support.v7.app.AlertDialog alert = builder.create();
alert.show();
0
ответ дан 22 November 2019 в 21:47
поделиться

Если Ваше Диалоговое окно создает на адаптере:

Передача Действие Конструктору Адаптера:

adapter = new MyAdapter(getActivity(),data);

Получают на Адаптере:

 public MyAdapter(Activity activity, List<Data> dataList){
       this.activity = activity;
    }

Теперь можно использовать на Разработчике

            AlertDialog.Builder alert = new AlertDialog.Builder(activity);
0
ответ дан 22 November 2019 в 21:47
поделиться

Вот то, как я разрешил ту же ошибку для своего приложения:
Добавление следующей строки после создания диалогового окна:

dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_DIALOG);  

Вы не должны будете получать контекст. Это особенно полезно, если Вы открываетесь, другое диалоговое окно по току открылось диалоговое окно. Или когда не удобно получить контекст.

Hope это может помочь Вам с Вашей разработкой приложений.

David

0
ответ дан 22 November 2019 в 21:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: