阻止对话框的正常关闭(AlertDialog)

Android 专栏收录该内容
25 篇文章 0 订阅


对于正常的情况下,如果我们点击OK或者Cancle的话,对话框都会关闭,这是应为它的内部都调用了dismiss();

但是现在需求是如果我们输入的用户名或者密码不正确,我们的对话框不关闭,直到我们输入的用户名和密码完全正确,才关闭。

这时我们就需要欺骗系统了。要想查看里面的实现原理,自己去看源码去,其实很简单的。下面只是作为我的笔记,以后忘了可以回来查看的。

	/**
	 * 假设对话框已经关闭,欺骗系统,以保持输入窗口
	 * @param mDialogLongInterface	点击对话框按钮事件传进来的mDialogInterface参数
	 */
	public static void keepDialog(DialogInterface mDialogLongInterface){
		try {
			Field field=mDialogLongInterface.getClass().getSuperclass().getDeclaredField("mShowing");
			field.setAccessible(true);//将mShowing设置为false表示对话框已关闭
			field.set(mDialogLongInterface,false);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 销毁对话框
	 * @param mDialogInterface
	 */
	public static void closeDialog(DialogInterface mDialogInterface){
		try {
			Field field=mDialogInterface.getClass().getSuperclass().getDeclaredField("mShowing");
			field.setAccessible(true);
			field.set(mDialogInterface, true);
			mDialogInterface.dismiss();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

在确定按钮的onClick点击事件的方法中添加keepDialog(***);

//如果输入的信息正确直接调用closeDialog(***);

在取消按钮的onClick点击事件的方法中添加closeDialog(***);

这样就噢啦。

大概代码如下:(就按照如下的方式去写就行了)

new AlertDialog.Builder(MainActivity.this)
	.setTitle(r.getString(“提示”)
	.setMessage(“Message”)
	.setPositiveButton(“确定”),new DialogInterface.OnClickListener() {
		public void onClick(DialogInterface dialog, int which) {
        		if("输入正确"){
				closeDialog(dialog);
			}else{
				keepDialog(dialog);
			} 
        	}
  	}).show();








  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页

打赏作者

被风吹过的夏天_V8

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值