0

У меня есть следующий код:AlertDialog не показывая на .Show() - Xamarin Android

private void CloseOrder(object sender, EventArgs e) 
{ 
    Android.Support.V7.App.AlertDialog.Builder alert = new Android.Support.V7.App.AlertDialog.Builder(this); 

    alert.SetTitle("Cerrar Pedido"); 
    alert.SetMessage("Are you sure?"); 
    alert.SetCancelable(true); 
    alert.SetPositiveButton("Confirm", delegate { this.Rta = true; }); 
    alert.SetNegativeButton("Cancel", delegate { this.Rta = false; }); 
    Dialog dialog = alert.Create(); 
    dialog.Show(); 

    if (this.Rta) 
    { 
     //Some code here 
    } 

} 

this.Rta является собственностью моего класса.

Проблема заключается в том, что предупреждение не отображается на dialog.show(), оно показывает, как только метод CloseOrder() закончился, поэтому this.Rta никогда не получает соответствующее значение.

Я много искал, но я не могу найти решение, если кто-нибудь может мне помочь, это было бы здорово!

ответ

0

dialog.Show() - асинхронный способ, то есть CloseOrder(object sender, EventArgs e) и dialog.Show() в конечном итоге в то же время.

Вы не можете получить присвоенное значение «Rta» в функции CloseOrder.

вы получите значение при нажатии подтвердить или отменить кнопку диалога.

Я предлагаю вам использовать отправителя сообщения в delegate{this.Rta = true}

Например:

mHandler handler = new mHandler(); 
Message message = new Message(); 
message.What = 1; 
alert.SetPositiveButton("Confirm", delegate { this.Rta = true; handler.SendMessage(message); }); 
alert.SetNegativeButton("Cancel", delegate { this.Rta = false; handler.SendMessage(message); }); 

// ....

class mHandler : Handler{ 
     public override void HandleMessage(Message message) { 
      switch (message.What) { 
       case 1: 
        if (this.Rta) 
        { 
          //Some code here 
        } 
        break; 
       } 
      } 
     }