Потому что его JavaScript такой. Ознакомьтесь со всеми связанными вопросами в правой части этой страницы.
Я думаю, что это также может произойти, если вы пытаетесь показать диалог из потока, который не является основным потоком пользовательского интерфейса.
Используйте runOnUiThread()
в этом случае.
Попробуйте использовать контекст действия, который будет находиться в диалоге. Но будьте осторожны, когда используете ключевое слово "this", потому что оно не будет работать каждый раз.
Например, если у вас есть TabActivity в качестве хоста с двумя вкладками, и каждая вкладка является другим действием, и если вы попытаетесь создать диалог из одной из вкладок (действий) и если вы используете «this», то вы получите исключение , В этом случае диалог должен быть связан с активностью хоста, на котором размещено все и видно. (Вы можете сказать наиболее видимый контекст родительской активности)
Я не нашел эту информацию ни в одном документе, но пытался. Это моё решение без сильного фона, если кто-то с более известными знаниями, не стесняйтесь комментировать.
Если вы находитесь за пределами действия, то вам нужно использовать в своей функции «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);
Вы должны передать this@YourActivity
вместо applicationContext
или baseContext
в Активность просто использовать:
MyActivity.this
в Фрагмент:
getActivity();
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();
Если Ваше Диалоговое окно создает на адаптере:
Передача Действие Конструктору Адаптера:
adapter = new MyAdapter(getActivity(),data);
Получают на Адаптере:
public MyAdapter(Activity activity, List<Data> dataList){
this.activity = activity;
}
Теперь можно использовать на Разработчике
AlertDialog.Builder alert = new AlertDialog.Builder(activity);
Вот то, как я разрешил ту же ошибку для своего приложения:
Добавление следующей строки после создания диалогового окна:
dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_DIALOG);
Вы не должны будете получать контекст. Это особенно полезно, если Вы открываетесь, другое диалоговое окно по току открылось диалоговое окно. Или когда не удобно получить контекст.
Hope это может помочь Вам с Вашей разработкой приложений.
David