首页 > 代码库 > Android设置AlertDialog点击按钮对话框不关闭(转)
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 }
Android设置AlertDialog点击按钮对话框不关闭(转)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。