zoukankan      html  css  js  c++  java
  • AlertDialog通过反射机制阻止Dialog关闭

    在开发Android应用程序时,我们可能会用到需要用户输入的Dialog,如登录对话框等。这时候,如果用户没有输入登录信息而点击<确定>按钮时,我们并不希望登录Dialog消失,而是采用一个Toast提示用户没有输入登录信息。在这里,我就向大家介绍下Dialog通过反射机制阻止Dialog关闭。

    在我们创建Dialog时,在Dialog的按钮点击事件处理中做如下处理

    [java] view plaincopy
    1. <pre name="code" class="java"><pre name="code" class="java">LayoutInflater inflater = LayoutInflater.from(this);  
    2. final View textEntryView = inflater.inflate(  
    3.         R.layout.f_alert_dialog_takeeffect, null);  
    4. AlertDialog.Builder builder = new AlertDialog.Builder(context);  
    5.         builder.setIcon(android.R.drawable.ic_dialog_alert);  
    6.         builder.setView(textEntryView);  
    7.         builder.setTitle(profileSettingList[settingId]);  
    8.         //确定按钮点击事件处理  
    9.         builder.setPositiveButton(R.string.btn_OK,  
    10.                 new DialogInterface.OnClickListener() {  
    11.                 public void onClick(DialogInterface dialog, int whichButton) {  
    12.                         Field field = null;  
    13.                         try {  
    14.                             //通过反射获取dialog中的私有属性mShowing  
    15.                             field = dialog.getClass().getSuperclass()  
    16.                                     .getDeclaredField("mShowing");  
    17.                             field.setAccessible(true);//设置该属性可以访问  
    18.                         } catch (Exception e) {  
    19.                               
    20.                         }  
    21.                         EditText message_edit = (EditText) textEntryView  
    22.                                 .findViewById(R.id.usermessage_edit);  
    23.                         String message = String.valueOf(message_edit.getText());  
    24.                         if (null == message || "".equals(message)) {  
    25.                             try {  
    26.                                 //输入框中内容为空,dialog不关闭  
    27.                                 field.set(dialog, false);  
    28.                                 dialog.dismiss();  
    29.                             } catch (Exception e) {  
    30.                             }  
    31.                             //提示用户输入登录信息  
    32.                             Toast.makeText(getApplicationContext(),  
    33.                                         R.string.pleaseenter_message,  
    34.                                         Toast.LENGTH_LONG).show();  
    35.                         } else {  
    36.                             try {  
    37.                                 //可以关闭  
    38.                                 field.set(dialog, true);  
    39.                                 dialog.dismiss();  
    40.                             } catch (Exception e) {  
    41.                             }  
    42.                             //登录业务处理</pre><br>  
    43. <br>  
    44. <pre></pre>  
    45. <pre></pre>  
    46. <p></p>  
    47. <p></p>  
    48. <pre></pre>  
    49. <pre></pre>  
    50. <pre></pre>  
    51. <pre></pre>  
    52. <pre></pre>  
    53. <pre></pre>  
    54. <pre></pre>  
    55.   
    56. </pre>  
  • 相关阅读:
    zabbix 安装(离线源码安装)
    云天励飞摄像头rtsp取流格式
    k8s创建deployment时出现错误ValidationError
    pod 生命周期
    十. Python基础(10)--装饰器
    九. Python基础(9)--命名空间, 作用域
    八. Python基础(8)--函数
    七. Python基础(7)--文件的读写
    六. Python基础(6)--语法
    五. Python基础(5)--语法
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6469719.html
Copyright © 2011-2022 走看看