AlertDialogHelper.java文件
package com.appCode.XXXXXX;import android.content.DialogInterface;
import android.util.Log;
import java.lang.reflect.Field;/*** 用于设置AlertDialog点击PositiveButton、NegativeButton、NeutralButton等按钮阻止关闭功能*/
public class AlertDialogHelper {private static final String LogTag = "AlertDialogHelper";// 获取Dialog的mShowing成员static public Field get_mShowing_field(DialogInterface dialog) {Field fieldmShowing = null;try {//Log.e(LogTag, "名称:" + dialog.getClass().getSuperclass().getSimpleName() + "  " + dialog.getClass().getSuperclass().getSuperclass().getSimpleName());//通过反射获取Dialog中的私有属性mShowingif (dialog.getClass().getSuperclass().getSimpleName().compareTo("Dialog") == 0) {fieldmShowing = dialog.getClass().getSuperclass().getDeclaredField("mShowing");} else if (dialog.getClass().getSuperclass().getSuperclass().getSimpleName().compareTo("Dialog") == 0) {fieldmShowing = dialog.getClass().getSuperclass().getSuperclass().getDeclaredField("mShowing");}else{Log.e(LogTag, "Dialog基类找不到");}} catch (Exception ex) {ex.printStackTrace();}return fieldmShowing;}// 设置mShowing=false忽略关闭请求static public void ignoreClose(DialogInterface dialog) {Field fieldmShowing = get_mShowing_field(dialog);if (null != fieldmShowing) {fieldmShowing.setAccessible(true);  //设置该属性可以访问try {fieldmShowing.set(dialog, false);   // 阻止关闭请求} catch (IllegalAccessException e) {e.printStackTrace();}}}// 恢复关闭请求static public void recoverClose(DialogInterface dialog) {Field fieldmShowing = get_mShowing_field(dialog);if (null != fieldmShowing) {fieldmShowing.setAccessible(true);  //设置该属性可以访问try {fieldmShowing.set(dialog, true);   // 恢复关闭请求} catch (IllegalAccessException e) {e.printStackTrace();}}}
}

使用方法:

View layoutEdit = View.inflate(getContext(), R.layout.multi_line_edit, null);
final EditText editLease = layoutEdit.findViewById(R.id.multiLineEdit);
final AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
builder.setTitle("输入XXXXXX");
builder.setView(layoutEdit);
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {AlertDialogHelper.recoverClose(dialog);String strCode = editLease.getText().toString().trim();if (strCode.isEmpty()) {AlertDialogHelper.ignoreClose(dialog);return;}}
}
);
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {AlertDialogHelper.recoverClose(dialog);}
}
);
//AlertDialog dlg = builder.create();
//dlg.show();
AlertDialog dlg = builder.show();

阻止AlertDialog关闭相关推荐

  1. .NET/C# 阻止屏幕关闭,阻止系统进入睡眠状态

    在 Windows 系统中,一段时间不操作键盘和鼠标,屏幕便会关闭,系统会进入睡眠状态.但有些程序(比如游戏.视频和演示文稿)在运行过程中应该阻止屏幕关闭,否则屏幕总是关闭,会导致体验会非常糟糕. 本 ...

  2. 阻止计算机系统自动更新,W10电脑系统如何阻止并关闭自动更新

    W10电脑系统如何阻止并关闭自动更新?很多用户升级W10 1709版本之后,发现电脑系统又自动下载一些电脑系统更新了,这让用户很是郁闷,其实想要关闭自动更新很容易,下面请随小编一起操作! W10 17 ...

  3. 监控软件之 阻止系统屏保 阻止系统关闭显示器 阻止系统待机

    目前大部分监控软件都是基于DDRAW来显示的,在屏保/系统关闭显示器/待机之后,画面会消失. 可用下面的代码阻止屏保/系统关闭显示器/待机 //记录是否启用屏幕保护 BOOL bScreenSaver ...

  4. C#阻止计算机关闭显示器和待机

    一.测试 测试环境:Win10 备注: 1.管理员和非管理员权限测试都正常: 2.执行阻止关闭显示器和待机后,退出程序会自动恢复: 3.使用Win+L切换到锁屏界面时,同样生效: 二.代码 代码来源: ...

  5. beforeunload中阻止提示关闭_Win10电脑中如何禁用或启用Defender的 PUA (PUP) 保护-系统城...

    在win10系统中,新增了一个安全性选项,该选项将使用户能够启用Windows Defender秘密功能,该功能可以检测并阻止已知的PUA(潜在有害应用程序)的安装.该功能默认情况下处于关闭状态的,那 ...

  6. electron 点击关闭_electron阻止应用关闭

    下载Quick start项目 这里为了便于演示,我们直接从GitHub上下载Quick start项目 git clone https://github.com/electron/electron- ...

  7. 阻止浏览器关闭 区分刷新和关闭 自试IE可用

    window.onbeforeunload = onbeforeunload_handler; function onbeforeunload_handler(){ if(event.clientX& ...

  8. php中new运算符的作用,C++_C++编程中new运算符的使用学习教程,new运算符用作从自由存储为 typ - phpStudy...

    C++编程中new运算符的使用学习教程 new运算符用作从自由存储为 type-name 的对象或对象数组分配内存,并将已适当分类的非零指针返回到对象. [::] new [placement] ne ...

  9. 电脑计算机无法关闭什么意思,笔记本电脑无法关闭是什么问题? (长按以关闭计算机以解决问题)...

    接下来,我将教您一些方法来解决计算机无法关闭的问题 随着技术的发展,我们离不开用于工作和娱乐的计算机. 我们习惯于每天使用后关闭计算机. 但是今天出现了异常情况,并且计算机无法意外关闭. 接下来,让我 ...

最新文章

  1. 天籁数学——数列篇(1)
  2. VTK:BiDimensionalWidget二维小部件用法实战
  3. win2003服务器 虚拟主机安全配置
  4. python pca降维_机器学习的降维打击
  5. DDD~DDD从零起步架构说明
  6. Visual Studio二次安装时无法更改安装位置解决方案
  7. centos怎么查看用户和用户组
  8. flex +overflow在firefox与edge中不生效的问题
  9. 一组优秀的 for .NET Winform UI控件——DotNetMagic最新版本2.3,推荐使用
  10. 获取贴图及IES文件
  11. 极客空间-MySQL实战45天-第二天
  12. tensorflow gpu环境安装
  13. 在线PS照片处理工具 无需下载怎么编辑图片
  14. JS-underfined is not a function
  15. BERT知识点汇总(en cour...)
  16. java实现word(docx)在线编辑(word转html,html转word)——解读document.xml结构
  17. APP定制开发的优势
  18. 入门,前后端实现简单账号密码登录
  19. STM32-外部中断详解
  20. python:open()方法+循环语句 练习

热门文章

  1. 刷脸支付时代新技术层出不穷我们应适应科技发展
  2. 如何设置使chrome新标签页中打开链接自动跳转到新标签页?
  3. 美图秀秀——将证件照变成标准的二寸证件照
  4. 如何追踪域名的解析过程?帮你搞懂域名解析是如何工作的
  5. 【梦飞扬】致90后程序员曾失去的青春
  6. Java快速实现导出PDF功能
  7. HTML里如何让图片对齐
  8. 包邮送50本清华出版社高质量Python、爬虫、机器学习书籍!
  9. python中常量池和堆_常量池和堆的区别
  10. 图片上的手写文字怎样才能转换成文档文字?