我需要在我的警报对话框关闭之后运行一些代码,然后通过单击按钮解除它。用户可以通过单击背景中活动的某个位置来关闭对话框。
我设法让这个像这里一样工作:
private void InfoAlert()
{
alert = new Android.App.AlertDialog.Builder(this);
alert.SetTitle(Resources.GetString(Resource.String.HiThere));
alert.SetMessage(Resources.GetString(Resource.String.BetaGame));
alert.SetNeutralButton(Resources.GetString(Resource.String.GotIt), (senderAlert, args) =>
{
var activity2 = new Intent(this, typeof(Activity_Login));
StartActivity(activity2);
Finish();
});
alert.SetOnCancelListener(new ProgressDialogCancel(this, this));
Dialog dialog = alert.Create();
dialog.Show();
}
public class ProgressDialogCancel : Java.Lang.Object, IDialogInterfaceOnCancelListener
{
private Context _context;
private readonly Activity _activity;
public ProgressDialogCancel(Context context, Activity activity)
{
_context = context;
_activity = activity;
}
public void OnCancel(IDialogInterface dialog)
{
Activity_AcctCreationLogin.btnInsta.Visibility = ViewStates.Visible;
Activity_AcctCreationLogin.btnFB.Visibility = ViewStates.Visible;
Activity_AcctCreationLogin.btnCreateAccount.Visibility = ViewStates.Visible;
Activity_AcctCreationLogin.btnExplain.Visibility = ViewStates.Visible;
Activity_AcctCreationLogin.btnLogin.Visibility = ViewStates.Visible;
Activity_AcctCreationLogin.ln1.SetBackgroundResource(0);
Activity_AcctCreationLogin.ln1.SetBackgroundColor(Color.ParseColor("#ffffff"));
Activity_AcctCreationLogin.alert.Dispose();
}
}
但是因为我需要从其他类运行这么多代码,所以这是一个非常不干净的解决方案。理想情况下,有一种方法可以这样做:
alert.SetOnCancelListener += delegate
{
//do something
};
我将如何实现这样的目标?
谢谢:)
答案 0 :(得分:1)
一个解决方案可能是 - 但要记住{i}必须在onCreate方法中调用
.setCanceledOnTouchOutside(true)
或覆盖Dialog dialog = new Dialog(context)
dialog.setCanceledOnTouchOutside(true);
并检查操作类型。如果动作类型是' MotionEvent.ACTION_OUTSIDE'表示用户在对话区域外进行交互。所以在这种情况下,你可以诋毁你的对话
onTouchEvent()
其他可能的解决方案请参考: How to dismiss a DialogFragment when pressing outside the dialog?
答案 1 :(得分:1)
如果我找对你,你需要像这样处理DismissEvent:
{{1}}