Android设置AlertDialog点击按钮对话框不关闭(转)_移动开发_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > 移动开发 > Android设置AlertDialog点击按钮对话框不关闭(转)

Android设置AlertDialog点击按钮对话框不关闭(转)

 2014/11/19 15:11:05  jenson138  程序员俱乐部  我要评论(0)
  • 摘要:(转自:http://blog.csdn.net/winson_jason/article/details/8485524)当我们在用到AndroidalertDialog创建对话框的时候,我们会遇到一个问题就是:我们添加的按钮不论是用setNegativeButton还是用setPositiveButton添加的按钮,点击的时候,都会关闭对话框,但是我们的一些实际需求,就需要保留这个对话框不动,例如输入校验码,密码之类的校验问题,如果用户输入错误,而关闭后弹出对话框,就很别扭了
  • 标签:android 对话

(转自: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 }

 

发表评论
用户名: 匿名