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

(转自: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 }
时间: 2024-11-27 15:48:44

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

Android Alert Dialog解决点击按钮对话框不关闭的问题

Android alertDialog中左中右三个按钮,点击按钮的时候,即使没调用dismiss方法,系统也会默认的去调用,而把这个对话框被关闭掉,但是我们的一些实际需求,就需要保留这个对话框不动,例如输入校验码,密码之类的校验问题,如果用户输入错误,而关闭后弹出对话框,就很别扭了.这里有个方案可以解决这个问题,使得即使按钮事件发生了,也不会关闭对话框.核心思想是欺骗一下系统,在点击事件里,修改该对话框的显示状态为关闭,则系统就不会去关闭该对话框了.具体实现代码如下: /** @author s

Android基础TOP5_4:点击按钮更换样式,设置透明度

在res/drawable创建两个样式 点击前/点击后 round: 1 <?xml version="1.0" encoding="utf-8"?> 2 <shape xmlns:android="http://schemas.android.com/apk/res/android"> 3 <!--设置渐变颜色 angle="0"是从左到右 90是从上到下 180是从右到左 --> 4 &

Android设置AlertDialog打开后不消失

最近项目收尾,一堆bug要改,还要对用户操作体验做一些优化,也是忙的不行.周末难得清闲,出去逛逛,看看风景,还好因为习大大要来,南京最近的天气还不错,只是苦了当地的不少农民工,无活可干,无钱可拿.想想觉得自己已经算是幸运的了,心存感激,好好工作. 原文地址请保留 http://www.cnblogs.com/rossoneri/p/4150001.html 整理一下以前查过的东西,可惜笔记本没记多少资料博客的网址,没法贴源地址. 关于本文,是要满足一个需求: 打开一个自定义对话框之后,再点击按钮

Android让AlertDialog点击确定不会消失

在Android的alertDialog中,使用自带的button,点击确定或者取消,都会关闭对话框.但我们有时候希望比如点击确定的时候发现他有没填的选项,我们提示他填写完整,这个时候不关闭对话框.当然解决办法,有很多.比如用个activity做dialog.或者自定义view.使用自己定义的button.不使用自带的button.但是有时候我们的dialog的view很简单,这个时候我们继续使用自带的button.这个时候该怎么办呢.可以利用的java的反射技术.在需要不关闭的按钮地方: tr

Android开发之点击按钮效果

还在Android入门中,写点东西总结记录一下,提高效率,促进学习. (有些地方会被和谐,所以拆开了,比如on click) 首先了解一下Android中button类的几种常用实现方法: 第一种:匿名内部类作为事件监听器 推荐使用这种方法. 第二种:内部类作为事件监听器 第三种:Activity本身作为事件监听 形式简洁但是程序结构有点乱. 第四种:直接绑定到标签 在布局文件中需要指定on Click属性,其han der()方法需要在.java文件中定义,如下: 对应的java代码如下: 1

Android设置AlertDialog中按钮的可用(Enable)状态

弹出一个保存文件的对话框,要控制输入内容限制,同时内容为空时保存按钮不可用.直接上代码: LayoutInflater mInflater = LayoutInflater.from(mActivity); View saveView = mInflater.inflate(R.layout.alert_dlg_save, null); // 设置输入文件名的EditText属性 final EditText filename = (EditText) saveView.findViewById

android开发之AlertDialog点击按钮之后不消失

最近有这样一个需求,我需要用户在一个弹出框里输入密码来验证,验证成功当然好说,但是如果验证失败则需要把alertdialog的标题改为"密码错误,请重新输入",并且这个alertdialog还不能消失,要等待用户继续输入. 那么怎么实现点击确定或者取消按钮之后dialog不消失呢? // 不关闭dialog try { // 不关闭 Field field = dialog .getClass() .getSuperclass() .getDeclaredField( "mS

android之AlertDialog 点击其它区域自己主动消失

遇到一个问题记录下来,在开发中使用了AlertDialog,想点击屏幕其它区域的时候让这个dialog消失,一開始不做不论什么设置,在小米手机能够正常显示,可是在三星中却有问题.后来发现少了一个属性: View dilaogView = initDialogView(); builder = new AlertDialog.Builder( activity).create(); builder.setCanceledOnTouchOutside(true);

android之AlertDialog 点击其他区域自动消失

遇到一个问题记录下来,在开发中使用了AlertDialog,想点击屏幕其他区域的时候让这个dialog消失,一开始不做任何设置,在小米手机可以正常显示,但是在三星中却有问题,后来发现少了一个属性: View dilaogView = initDialogView(); builder = new AlertDialog.Builder( activity).create(); builder.setCanceledOnTouchOutside(true); 版权声明:本文为博主原创文章,未经博主