通过单击活动中的任意位置找出Dialog关闭的时间

时间:2018-04-05 09:10:40

标签: android xamarin.android android-dialog

我需要在我的警报对话框关闭之后运行一些代码,然后通过单击按钮解除它。用户可以通过单击背景中活动的某个位置来关闭对话框。

我设法让这个像这里一样工作:

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

我将如何实现这样的目标?

谢谢:)

2 个答案:

答案 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?

OR Allow outside touch for DialogFragment

答案 1 :(得分:1)

如果我找对你,你需要像这样处理DismissEvent

{{1}}