2017-01-12 79 views
0

我有以下代码:在.show AlertDialog没有显示() - 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()同时结束。

您无法在CloseOrder函数中获得'Rta'指定的值。

当您单击确认取消对话框的按钮时,您将获得该值。

我建议你使用邮件发件人在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; 
       } 
      } 
     }