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

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

[java] view
plain
copy

  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. EditText message_edit = (EditText) textEntryView
  21. .findViewById(R.id.usermessage_edit);
  22. String message = String.valueOf(message_edit.getText());
  23. if (null == message || "".equals(message)) {
  24. try {
  25. //输入框中内容为空,dialog不关闭
  26. field.set(dialog, false);
  27. dialog.dismiss();
  28. } catch (Exception e) {
  29. }
  30. //提示用户输入登录信息
  31. Toast.makeText(getApplicationContext(),
  32. R.string.pleaseenter_message,
  33. Toast.LENGTH_LONG).show();
  34. } else {
  35. try {
  36. //可以关闭
  37. field.set(dialog, true);
  38. dialog.dismiss();
  39. } catch (Exception e) {
  40. }
  41. //登录业务处理</pre><br>
  42. <br>
  43. <pre></pre>
  44. <pre></pre>
  45. <p></p>
  46. <p></p>
  47. <pre></pre>
  48. <pre></pre>
  49. <pre></pre>
  50. <pre></pre>
  51. <pre></pre>
  52. <pre></pre>
  53. <pre></pre>
  54. </pre>

AlertDialog通过反射机制阻止Dialog关闭的更多相关文章

  1. 减小Delphi2010程序的尺寸(关闭RTTI反射机制)

    自从Delphi2010增强了RTTI反射机制后,编译出来的程序变得更大了,这是因为默认情况下 Delphi2010 给所有类都加上了RTTI信息(呵呵,不管你用不用它,好像实用价值确实不高,至少目前 ...

  2. Android反射机制实现与原理

    本文介绍Android反射机制实现与原理,在介绍之前,要和Java进行比较,所以先看下Java中的反射相关知识: 一.反射的概念及在Java中的类反射 反射主要是指程序可以访问.检测和修改它本身状态或 ...

  3. android中反射机制

    本文介绍Android反射机制实现与原理,在介绍之前,要和Java进行比较,所以先看下Java中的反射相关知识: 一.反射的概念及在Java中的类反射 反射主要是指程序可以访问.检测和修改它本身状态或 ...

  4. Java 类反射机制分析

    Java 类反射机制分析 一.反射的概念及在Java中的类反射 反射主要是指程序可以访问.检测和修改它本身状态或行为的一种能力.在计算机科学领域,反射是一类应用,它们能够自描述和自控制.这类应用通过某 ...

  5. 反射机制及开源框架xUitls的使用,使用HttpUtils通过断点续传下载文件

    反射: Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法: 对于任意一个对象,都能够调用它的任意一个方法和属性 Java反射机制主要提供下面几种用途: 1•在运行时判断 ...

  6. Java反射机制可以动态修改实例中final修饰的成员变量吗?

    问题:Java反射机制可以动态修改实例中final修饰的成员变量吗? 回答是分两种情况的. 1. 当final修饰的成员变量在定义的时候就初始化了值,那么java反射机制就已经不能动态修改它的值了. ...

  7. 【JAVA反射机制】

    一.Class类 Java.lang.Object |-java.lang.Class<T> 构造方法:无. 常用方法: static Class<?> forName(Str ...

  8. 黑马程序员——【Java高新技术】——反射机制

    ---------- android培训.java培训.期待与您交流! ---------- 一.概述 1.Java反射机制:是指“在运行状态中”,对于任意一个类,都能够知道这个类中的所有属性和方法: ...

  9. .Net反射机制分析和使用

    1..NET反射的概述 .NET反射是审查元数据并动态收集关于它的类型信息的能力. 应用程序结构分为应用程序域—程序集—模块—类型—成员几个层次,公共语言运行库加载器管理应用程序域.这些域在拥有相同应 ...

随机推荐

  1. ViewPage第二课为ViewPage加入标题

    在第一课 学前准备:掌握ViewPage第一课http://blog.csdn.net/wei_chong_chong/article/details/50468832 为ViewPage加入标题: ...

  2. E11 css hack

    E11      识别\0 { color:red; color:blue \0; } chrome下颜色是红色.IE11是蓝色

  3. opencv cvtColor dtype issue(error: (-215) )

    opencv cvtColor dtype issue(error: (-215) ) 更详细的错误信息如下,color.cpp:9710: error: (-215) depth == CV_8U ...

  4. 算法 Tricks(三)—— 数组(序列)任意区间最小(大)值

    序列(数组)的区间通过左右端点确定,这样首先设置一个最值变量用来记录最值,从左端点一步步移动到右端点,自然移动的过程中也可以计算整个区间的和,也即一次线性遍历下来,可同时获得多个有用信息. // 区间 ...

  5. autohotkey excel getfullname (ComObjActive)

  6. 10.5 android输入系统_Reader线程_使用EventHub读取事件和核心类及配置文件_实验_分析

    4. Reader线程_使用EventHub读取事件 使用inotify监测/dev/input下文件的创建和删除 使用epoll监测有无数据上报 细节: a.fd1 = inotify_init(& ...

  7. ARCGIS动态画点

    小马哥淡定 原文 ARCGIS动态画点 private void DrawPointOnMap(double x, double y,bool clear) { IMapControl2 pMapCt ...

  8. [Angular2 Form] Check password match

    Learn how to create a custom validator to check whether passwords match. <h1>password match< ...

  9. angular模块详解

    原文: https://www.jianshu.com/p/819421ff955a 大纲 1.angular应用是模块化的 2.对模块(Module)的认识 3.模块的分类:根模块和特性模块 4.N ...

  10. (五)RabbitMQ消息队列-安装amqp扩展并订阅/发布Demo(PHP版)

    原文:(五)RabbitMQ消息队列-安装amqp扩展并订阅/发布Demo(PHP版) 本文将介绍在PHP中如何使用RabbitMQ来实现消息的订阅和发布.我使用的系统依然是Centos7,为了方便, ...