如何监听AlertDialog点击Activity背景关闭事件并执行代码?
监听AlertDialog非按钮关闭事件的实现方案
在Xamarin Android中,要捕获AlertDialog被点击外部区域、按下返回键这类非按钮方式关闭的场景,你可以通过SetOnCancelListener来实现,具体步骤和代码如下:
核心思路
AlertDialog在被点击外部区域、按下返回键、调用Cancel()方法时,会触发OnCancel回调——这正是你需要的非按钮关闭场景。而按钮点击关闭对话框时,默认触发的是OnDismiss而非OnCancel,刚好能和非按钮场景区分开。
完整代码示例
private void InfoAlert() { // 1. 创建AlertDialog构建器 var alertBuilder = new Android.App.AlertDialog.Builder(this); alertBuilder.SetTitle(Resources.GetString(Resource.String.HiThere)); alertBuilder.SetMessage(Resources.GetString(Resource.String.BetaGame)); // 2. 设置按钮(如果需要) alertBuilder.SetNeutralButton(Resources.GetString(Resource.String.OK), (sender, args) => { // 按钮点击时的专属逻辑,只会在用户点击按钮时执行 Toast.MakeText(this, "点击按钮关闭对话框", ToastLength.Short).Show(); }); // 3. 创建AlertDialog实例(注意:要操作对话框必须先调用Create()) var alertDialog = alertBuilder.Create(); // 4. 确保允许点击外部关闭对话框(默认值为true,若之前修改过可手动设置) alertDialog.CanceledOnTouchOutside = true; // 5. 设置取消监听器,监听非按钮关闭事件 alertDialog.SetOnCancelListener(new IDialogInterfaceOnCancelListener { OnCancel = (dialog) => { // 这里就是你要执行的特定代码! Toast.MakeText(this, "对话框被外部点击/返回键关闭", ToastLength.Short).Show(); // 比如:更新页面状态、保存临时数据、触发后续业务逻辑等 } }); // 6. 显示对话框 alertDialog.Show(); }
额外场景:区分所有关闭情况
如果你需要监听所有对话框消失的场景(包括按钮点击),并在其中筛选出非按钮关闭的情况,可以配合OnDismissListener和一个标记变量:
private void InfoAlert() { bool isDismissedByButton = false; var alertBuilder = new Android.App.AlertDialog.Builder(this); alertBuilder.SetNeutralButton(Resources.GetString(Resource.String.OK), (sender, args) => { isDismissedByButton = true; Toast.MakeText(this, "点击按钮关闭", ToastLength.Short).Show(); }); var alertDialog = alertBuilder.Create(); alertDialog.SetOnDismissListener(new IDialogInterfaceOnDismissListener { OnDismiss = (dialog) => { if (!isDismissedByButton) { // 非按钮关闭的情况,执行你的专属代码 Toast.MakeText(this, "非按钮方式关闭对话框", ToastLength.Short).Show(); } } }); alertDialog.Show(); }
这样就能精准捕获你需要的非按钮关闭场景啦!
内容的提问来源于stack exchange,提问作者innomotion media
相关产品推荐
相关产品推荐

