在开发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. c++11 多线程 -- 基本使用

    c++11 多线程 – 基本使用 前言:这篇文章仅针对没有使用过c++11线程库的童鞋来高速入门,也是自己的一个简单记录,内容比較基础. 1.线程的基本使用 2.相互排斥量 3.条件变量 4.原子变量 ...

  2. 前端项目课程7 banner设计注意事项

    前端项目课程7 banner设计注意事项 一.总结 一句话总结: 1.每个部分的里面的部分可以用相同的名字么,如何修改样式呢? 可以, 用模块名 + 比如上中下(top middle bottom) ...

  3. zynq mac地址修改

    工作中遇到多个zynq板子同时位于一个交换机网络中,由于默认mac地址相同,无法进行通信,因此需要对每个板子修改mac地址. 方案:使用uboot配置文件 步骤: 在uboot配置文件中添加及修改下面 ...

  4. jQuery实现多种切换效果的图片切换的五款插件

    1:Nivo SliderNivoslider:丰富的图片切换效果 官方网址:https://themeisle.com/plugins/nivo-slider 查看演示:https://www.he ...

  5. 【81.82%】【codeforces 740B】Alyona and flowers

    time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  6. Xposed也要热更新

    好久没写博客了.这次玩一点不一样的. 吐槽&起因 相信熟悉Xposed的小伙伴们都知道,每次写完Xposed都要重新启动啊.有木有!反射错了,写错了名字.改一个log,都要重新启动啊有木有!重 ...

  7. 【u123】最大子段和

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] 给出一段序列,选出其中连续且非空的一段使得这段和最大. [输入格式] 输入文件maxsum1.in的第 ...

  8. 应用层协议实现系列(三)——FTPserver之设计与实现

    在实现了HTTPserver之后.本人打算再实现一个FTPserver. 因为FTP协议与HTTP一样都位于应用层,所以实现原理也类似. 在这里把实现的原理和源代码分享给大家. 首先须要明白的是FTP ...

  9. copy 和 MutableCopy

    1:copy拷贝得到的对象都是不可变对象,MutableCopy拷贝得到的对象都是可变对象.MutableCopy拷贝得到的对象都是新的对象,会重新分配内存地址,而copy拷贝的对象既可以是新对象,也 ...

  10. php实现求最小的k个数(日常出错很容易是分号或者$符号忘记写了)

    php实现求最小的k个数(日常出错很容易是分号或者$符号忘记写了) 一.总结 日常出错很容易是分号或者$符号忘记写了 二.php实现求最小的k个数 题目描述 输入n个整数,找出其中最小的K个数.例如输 ...