(转自:http://blog.csdn.net/winson_jason/article/details/8485524)

当我们在用到Android alertDialog创建对话框 的时候,我们会遇到一个问题就是:我们添加的按钮不论是用setNegativeButton还是用setPositiveButton添加的按钮,点击的时候,都会关闭对话框,但是我们的一 些实际需求,就需要保留这个对话框不动,例如输入校验码,密码之类的校验问题,如果用户输入错误,而关闭后弹出对话框,就很别扭了。

在网上找了一下,原来在源码中有一个boolean变量是控件对话框的关闭与否的mShowing变量,我们只需要利用反射改变这个变量就可以控制我们的对话框是不是关闭了。所以,我们可以通过手动设置mShowing的值来达到目的。

 1      try { 2      3      Field field = 4      dialog.getClass().getSuperclass().getDeclaredField("mShowing"); 5      6      field.setAccessible(true); 7      8      field.set(dialog, false);//true表示要关闭,false不关闭 9     10      } catch (Exception e) {11     12      e.printStackTrace();13     14      }15     

具体代码:

 1      2      3      4      new AlertDialog.Builder(Bookstore.getInstance()) 5      6      .setTitle(r.getString(“提示”) 7      8      .setMessage(“不能打开”) 9     10      .setPositiveButton(“确定”), new DialogInterface.OnClickListener() {11     12      public void onClick(DialogInterface dialog, int which) {13     14      try {//下面三句控制弹框的关闭15     16      Field field =17      dialog.getClass().getSuperclass().getDeclaredField("mShowing");18     19      field.setAccessible(true);20     21      field.set(dialog,true);//true表示要关闭22     23      } catch (Exception e) {24     25      e.printStackTrace();26     27      }28     29     30      }31     32      }).show();

本人参考后补充:

若在定义Field提示出错时可改为:

java.lang.reflect.Field field = dialog.getClass().getSuperclass().getDeclaredField("mShowing");

一旦设置了不关闭DIALOG,点取消也不会关闭,所以需在取消事件下设置为可关闭:

 1 ... 2  3 new AlertDialog.Builder(this) 4 .setTitle(titleId) 5 .setView(layout) 6 .setPositiveButton(android.R.string.ok, 7 new DialogInterface.OnClickListener() { 8 public void onClick(DialogInterface dialog, 9 int which) {10 11 //点确定按钮12 13 }14 }).setNegativeButton(android.R.string.cancel, 15 new DialogInterface.OnClickListener() {16 17 //点取消按钮18 public void onClick(DialogInterface dialog,19 int which) {    20 try {//下面三句控制弹框的关闭21 java.lang.reflect.Field field = dialog.getClass().getSuperclass().getDeclaredField("mShowing");22 field.setAccessible(true);23 field.set(dialog,true);//true表示要关闭24 25 } catch (Exception e) {26 e.printStackTrace();27 }    28 }29 30 })31 //null)32 .create().show();33 }

更多相关文章

  1. Android之开关飞行模式
  2. Android(安卓)数据业务框架分析
  3. Android(安卓)NDK JNI 入门笔记-day02-基本数据类型数据传递
  4. SQLite操作
  5. android studio删除module
  6. delphi xe5 android 手机上使用sqlite
  7. 简析Android多种AlertDialog对话框效果
  8. andrioid——checkbox勾选按钮自定义样式
  9. 【Android】入门案例(一)——简单登录

随机推荐

  1. Android(安卓)Activity启动模式
  2. Android(安卓)SQLite数据库操作
  3. Android日志收集
  4. android屏幕适配建议 (二)
  5. Android中同时选择日期和时间
  6. Android初步了解入门
  7. textview中加链接
  8. Android之TextView
  9. Android 打开本地文件兼容7.0
  10. 界面开发中布局属性全面剖析