Диалоговое окно принятия Android

#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();