2017-01-12 16 views
0

나는 다음과 같은 코드가 있습니다에 AlertDialog가 .show에 표시되지 않는() - 자 마린 안드로이드

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; 
       } 
      } 
     }