#android #dialog
#Android #диалоговое окно
Вопрос:
Я хочу показать диалоговое окно с принятием / отменой после нажатия кнопки
temp.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final AlertDialog.Builder dialog= new AlertDialog.Builder(getApplicationContext());
dialog.setTitle("title");
dialog.setMessage("Message");
dialog.setPositiveButton("Ok",null);
dialog.setNegativeButton("Cancel",null);
dialog.create().show();
}
});
Когда я нажимаю кнопку, мое приложение выходит из строя. Как я могу найти ошибку?
Журнал
2020-10-15 14:35:26.003 20221-20221/com.example.aplikacjakurierska E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.aplikacjakurierska, PID: 20221
android.view.WindowManager$BadTokenException: Unable to add window -- token null is not valid; is your activity running?
at android.view.ViewRootImpl.setView(ViewRootImpl.java:1068)
at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:409)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:109)
at android.app.Dialog.show(Dialog.java:340)
at com.example.aplikacjakurierska.Manager.ManagerActivity$4.onClick(ManagerActivity.java:88)
at android.view.View.performClick(View.java:7448)
at android.view.View.performClickInternal(View.java:7425)
at android.view.View.access$3600(View.java:810)
at android.view.View$PerformClick.run(View.java:28305)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
Хорошо, я изменил
getApplicationContext()
вкл.
ManagerActivity.this
И это работает. но почему это не сработало с getApplicationContext() ?
Комментарии:
1. Поделитесь своим журналом.
2. Я добавил в вопрос
Ответ №1:
Вы должны передать прослушиватель в setPositiveButton()
и setNegativeButton()
вместо нулевого значения. Вы можете сделать это с помощью класса annonymus, как в этом примере:
final AlertDialog.Builder dialog= new AlertDialog.Builder(getApplicationContext());
dialog.setTitle("title");
dialog.setMessage("Message");
dialog.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// place your actions here
}
});
dialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// place your actions on cancle here
}
});
dialog.create().show();