AlertDialog не будет отображаться в моем приложении - почему так? - PullRequest
0 голосов
/ 16 января 2019

Я пытаюсь сделать AlertDialog при сбое операции. Но я не могу отобразить это на экране, я не понимаю, почему, так как я сделал то, что показало учебное пособие.

Я знаю, вызывается displayDialogError, потому что мой вывод показывает значение lol. Но тогда ничего не появляется, когда должен появиться AlertDialog.

public String lol;

public void doThings(String str) {
    lol = str;
    if (!lol.isEmpty()) {
        System.out.println(lol);
        displayDialogError();
    }
    else
        System.out.println("Request worked");
}

public void displayDialogError() {
    AlertDialog alertDialog = new AlertDialog.Builder(this).create();
    alertDialog.setTitle("Alert");
    alertDialog.setMessage("Alert message to be shown");
    alertDialog.setButton(AlertDialog.BUTTON_NEUTRAL, "OK",
            new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                    dialog.dismiss();
                }
            });
    alertDialog.show();
}

AlertDialog alertDialog = новый AlertDialog.Builder (this) .create ();

В этой строке this - это моя текущая активность, отображаемая на экране.

Заранее спасибо за помощь.

Ответы [ 3 ]

0 голосов
/ 16 января 2019

Попробуйте это:

new AlertDialog.Builder(YourActivity.this).setTitle("Alert")
    .setMessage("Alert message to be shown")
    .setPositiveButton("OK",
        new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
            }
        }).show();
0 голосов
/ 16 января 2019

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

    AlertDialog.Builder builder = new AlertDialog.Builder(<YourActivity>.this);
    builder.setTitle("Alert");
    builder.setMessage("Alert message to be shown");
    builder.setButton(AlertDialog.BUTTON_NEUTRAL, "OK",
            new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                    dialog.dismiss();
                }
            });

    AlertDialog alertDialog = builder.create();

Переместите alertDialog в переменную класса или передайте ее вашему методу в качестве параметра. А потом просто покажи это, когда нужно.

    alertDialog.show();

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

runOnUiThread(new Runnable() {
            @Override
            public void run() {
                alertDialog.show();
            }
        }
0 голосов
/ 16 января 2019

Можете ли вы попробовать обновленный код Возможно, проблема в контексте

 public void displayDialogError() {
    AlertDialog alertDialog = new AlertDialog.Builder(YourActivity.this);
    alertDialog.setTitle("Alert");
    alertDialog.setMessage("Alert message to be shown");
    alertDialog.setButton(AlertDialog.BUTTON_NEUTRAL, "OK",
            new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                    dialog.dismiss();
                }
            });
    alertDialog.show();
}
...