Xamarin: закрыть диалоговое окно оповещения при нажатии кнопки «Назад»

Я новичок в Xamarin Android. У меня есть активность, и при нажатии на текст отображается предупреждение. Код AlertDialog:

textView1.Click += (sender, e) =>
            {
                AlertDialog.Builder alert = new AlertDialog.Builder(this);
                alert.SetTitle("title");
                alert.SetMessage("Message");
                alert.SetCancelable(false);
                alert.SetPositiveButton("Cerrar Sesión", delegate { funcCerrarSesion(); });
                alert.SetNegativeButton("Salir", delegate { Finish(); });
                alert.SetNeutralButton("Volver", delegate {  });

                RunOnUiThread(() =>
                {
                    alert.Show();
                });
            };

Мне нужно, чтобы при нажатии кнопки «Назад» это событие закрывало AlertDialog. Благодарю вас.

PD: я разрабатываю Visual Studio 2012 + подключаемый модуль Xamarin.

Редактирование (ρяσѕρєя K's Solution):

    Dialog dialog;
            protected override void OnCreate(Bundle bundle)
            {
..
textView1.Click += (sender, e) =>
            {
                AlertDialog.Builder alert = new AlertDialog.Builder(this);
                alert.SetTitle("Advertencia");
                alert.SetMessage("Está seguro?");
                alert.SetCancelable(false);
                alert.SetPositiveButton("Cerrar Sesión", delegate { funcCerrarSesion(); });
                alert.SetNegativeButton("Salir", delegate { Finish(); });
                alert.SetNeutralButton("Volver", delegate {  });

                RunOnUiThread(() =>
                {
                    dialog = alert.Create();
                    dialog.Show();
                });
            };
...
}

public override void OnBackPressed()
        {
            if (dialog != null)
            {
                if (dialog.IsShowing)
                {
                    dialog.Dismiss();
                }
                else
                {
                    base.OnBackPressed();
                }
            }
            else
            {
                base.OnBackPressed();
            }
        }

Это продолжает показывать оповещение, но при нажатии back button оповещение не закрывается.


person Kevin F    schedule 20.02.2015    source источник


Ответы (1)


Мне нужно, чтобы при нажатии кнопки «Назад» это событие закрывало AlertDialog

Чтобы закрыть диалоговое окно при нажатии клавиши «Назад»:

1. Переопределить OnBackPressed.

2. Необходимо получить доступ к объекту alert в OnBackPressed, поэтому объявите объект alert перед OnCreate :

public override void OnBackPressed()
{
    if (alert !=null){
       if(alert.IsShowing){
          alert.Dismiss ();
        }else{
          base.OnBackPressed();
        }
     }else{
        base.OnBackPressed();
     }
}
person ρяσѕρєя K    schedule 20.02.2015
comment
Android.App.AlertDialog.Builder не содержит определения для IsShowing, и метод расширения Android.App.AlertDialog.Builder не найден. (Это сообщение появляется и на Dismiss) - person Kevin F; 20.02.2015
comment
@KevinF: хорошо, объявите Dialog dialog перед методом onCreate и используйте dialog=alert.Create ();dialog.show() вместо alert.Show(); при нажатии кнопки - person ρяσѕρєя K; 20.02.2015
comment
@KevinF: тогда используйте dialog вместо alert в OnBackPressed - person ρяσѕρєя K; 20.02.2015
comment
Да, кнопка «Назад» не закрывает оповещение. - person Kevin F; 20.02.2015
comment
@ρяσѕρєяK мое событие никогда не вызывается, если пользователь закрывает диалоговое окно только нажатием кнопки «Назад» (это работает, если пользователь нажимает кнопку «Назад» после закрытия диалогового окна) - person Benjamin Karlog; 24.01.2017