• 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 }
  • 相关阅读:
    BZOJ 1051: [HAOI2006]受欢迎的牛( tarjan )
    BZOJ 2208: [Jsoi2010]连通数( DFS )
    js效果-鼠标提示框
    CSS-背景
    CSS-文本
    tomcat 安装 for Mac
    CSS选择器基础
    POJ3349-Snowflake Snow Snowflakes-Hash
    数据库的三大设计范式
    HDU5120-Intersection-两个圆环相交面积
  • 原文地址:https://www.cnblogs.com/jenson138/p/4108129.html
Copyright © 2020-2023  润新知