Подтвердить что ты не робот

Как проверить, открыто или нет диалоговое окно?

У меня есть статический метод, в котором я создаю диалог

public static void showDialog(Context context) {
    AlertDialog.Builder builder = new AlertDialog.Builder(context);
    builder.setTitle("Title");
    builder.setMessage("Message");
    builder.setPositiveButton("ok", new OnClickListener() {
            public void onClick(DialogInterface dialog, int arg1) {
                dialog.dismiss();
            }});
    builder.setCancelable(false);
    builder.create().show();
}

В моем приложении может возникнуть ситуация, когда метод можно вызывать несколько раз, но я не хочу открывать два или более диалоговых окна. Как проверить, открыто или нет диалоговое окно? Спасибо...

4b9b3361

Ответ 1

Вы должны поместить этот код в каждое действие, которое вы хотите поддержать этой функцией.

public AlertDialog myAlertDialog;

public void showDialog(Context context) {
        if( myAlertDialog != null && myAlertDialog.isShowing() ) return;

        AlertDialog.Builder builder = new AlertDialog.Builder(context);
        builder.setTitle("Title");
        builder.setMessage("Message");
        builder.setPositiveButton("ok", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int arg1) {
                    dialog.dismiss();
                }});
        builder.setCancelable(false);
        myAlertDialog = builder.create();
        myAlertDialog.show();
}

Ответ 2

Перепишите свой метод для возврата AlertDialog, назначьте его члену и проверьте перед вызовом этого метода, если он равен null или !isShowing().
Вместо этого вы можете использовать onCreateDialog. Внесите этот метод в базовый класс для ваших действий, которые нуждаются в управлении диалоговым окном, а затем вызовите showDialog(int id) везде, где вы хотите.

Ответ 3

            AlertDialog alertDialog;
    alertDialog = new AlertDialog.Builder(this).create();
    alertDialog.setTitle(title);
    alertDialog.setMessage(msg);        
    alertDialog.setButton(-3, "Text Parsed", new DialogInterface.OnClickListener() {

        @Override
        public void onClick(DialogInterface dialog, int which) {
            // TODO Auto-generated method stub
            dialog.dismiss();
        }
    });

    alertDialog.show();