2017-01-12 13 views
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()が同時に終了することを意味します。

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; 
       } 
      } 
     } 
関連する問題