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>  
  • 相关阅读:
    dubbo注册zookeeper保错原因
    Django 终端打印SQL语句
    Django 的orm模型
    Django 的路由系统
    Django 开端
    前端 jq的ajax请求
    前端 后台
    前端 JQ操作
    前端 链式操作
    前端 JQ事件操作
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6469719.html
Copyright © 2011-2022 走看看