最近项目收尾,一堆bug要改,还要对用户操作体验做一些优化,也是忙的不行。周末难得清闲,出去逛逛,看看风景,还好因为习大大要来,南京最近的天气还不错,只是苦了当地的不少农民工,无活可干,无钱可拿。想想觉得自己已经算是幸运的了,心存感激,好好工作。

原文地址请保留 http://www.cnblogs.com/rossoneri/p/4150001.html

整理一下以前查过的东西,可惜笔记本没记多少资料博客的网址,没法贴资料地址。

关于本文,是要满足一个需求:

打开一个自定义对话框之后,再点击按钮,希望弹出一个确认之类的对话框显示在前端,同时不希望原来的对话框消失。

方法就是用反射机制获取相关字段进行设置:

Field field = dialog.getClass().getSuperclass().getDeclaredField("mShowing");
field.setAccessible(true);
field.set(dialog, false);

关于getDeclaredField()往后再研究下。

写了个简单的demo:

 public class MainActivity extends ActionBarActivity {

     Button btn;

     @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); btn = (Button) findViewById(R.id.btn);
btn.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
// TODO Auto-generated method stub
AlertDialog.Builder builder = new Builder(MainActivity.this,
AlertDialog.THEME_HOLO_LIGHT);
builder.setTitle("Test");
builder.setMessage("Try to push the OK button and the dialog won`t be dismissed, do it now !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
builder.setPositiveButton("OK",
new DialogInterface.OnClickListener() { @Override
public void onClick(DialogInterface dialog,
int which) {
// TODO Auto-generated method stub
try {
Field field = dialog.getClass()
.getSuperclass()
.getDeclaredField("mShowing");
field.setAccessible(true);
field.set(dialog, false); // 此处设为true则可以关闭
} catch (Exception e) {
e.printStackTrace();
} AlertDialog.Builder confirmDlg = new Builder(
MainActivity.this,
AlertDialog.THEME_HOLO_DARK);
confirmDlg.setTitle("confirm");
confirmDlg
.setMessage("Do you want to do the action?");
confirmDlg.create().show(); }
}); builder.setNegativeButton("Cancel",
new DialogInterface.OnClickListener() { @Override
public void onClick(DialogInterface dialog,
int which) {
// TODO Auto-generated method stub
try {
Field field = dialog.getClass()
.getSuperclass()
.getDeclaredField("mShowing");
field.setAccessible(true);
field.set(dialog, true);
} catch (Exception e) {
e.printStackTrace();
}
}
}); builder.create().show();
}
}); }
}

[Android] 设置AlertDialog打开后不消失的更多相关文章

  1. Android设置AlertDialog点击按钮对话框不关闭(转)

    (转自:http://blog.csdn.net/winson_jason/article/details/8485524) 当我们在用到Android alertDialog创建对话框 的时候,我们 ...

  2. Android在 Alertdialog对话框中点击消失?

    在开发的时候遇到一个问题.就是一触摸对话框边缘外部,对话框会自己主动消失.这个问题非常纠结啊,查找了一下发现从Android 4.0開始.AlertDialog有了变化.就是在触摸对话框边缘外部.对话 ...

  3. [Android] 设置AlertDialog中按钮的可用(Enable)状态

    弹出一个保存文件的对话框,要控制输入内容限制,同时内容为空时保存按钮不可用. 原文地址请保留http://www.cnblogs.com/rossoneri/p/4140184.html 直接上代码: ...

  4. Android 设置AlertDialog的大小 .

    AlertDialog dialog = builder.setTitle("消息列表") .setView(layout) .create(); dialog.show(); / ...

  5. Android设置屏幕旋转后保存数据

    1.onCreate()方法中最后判断需要保存的状态值 if(savedInstanceState != null){ mCurrentIndex = savedInstanceState.getIn ...

  6. js弹框3秒后自动消失

    开发中有时候会需要最出弹框后,过几秒自动消失的效果,下面给大家分享一下我自己做的一个小案例. 案例中的弹框使用的是bootstrap里面的模态框,实现自动消失则用的是js中的setInterval方法 ...

  7. 黄聪:C#设置窗体打开位置(在显示器的右下角打开)

    ; ; this.SetDesktopLocation(x, y); 注释:System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Size.Wid ...

  8. 安卓工作室 android studio 汉化后,报错。 设置界面打不开。Can't find resource for bundle java.util.PropertyResourceBundle, key emmet.bem.class.name.element.separator.label

    安卓工作室 android studio 汉化后,报错. 设置界面打不开. Android studio has been sinified and reported wrong.The setup ...

  9. winform窗口打开后文本框的默认焦点设置

    原文:http://blog.csdn.net/kongwei521/article/details/6871411 winform窗口打开后文本框的默认焦点设置,进入窗口后默认聚焦到某个文本框,两种 ...

随机推荐

  1. Centos7安装Nginx实战

    一.背景 最近在写一些自己的项目,用到了nginx,所以自己动手来在Centos7上安装nginx,以下是安装步骤. 二.基本概念以及应用场景 1.什么是nginx Nginx是一款使用C语言开发的高 ...

  2. JavaScript -- Window-Confirm

    -----032-Window-Confirm.html----- <!DOCTYPE html> <html> <head> <meta http-equi ...

  3. C#基础篇十小练习

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace P03练 ...

  4. docker内存和cpu调试

    本地启动了一个sshd的容器服务,但该容器经常会被重启导致ssh连接失败,使用kubectl describe pod命令查看改命令发现有容器返回值为137,一般是系统环境原因,且一般为内存不足导致的 ...

  5. vmware workstation 下安装ubuntu

    安装时我是借鉴 https://blog.csdn.net/xiaohua0877/article/details/78507631 期间遇到几个问题 键盘不好使,解决办法是重新运行wmware wo ...

  6. springboot 多模块 -- 将web拆分出去 - 流动计算架构

    前言: 之前将各层都拆分出去, 作为一个独立的可替换的子模块. 感觉比以前确实是灵活了一些. 不管是电商项目, 还是现在公司做的项目, 其中, 有很多的业务逻辑, 都是一样的, 但是由于不在一个系统中 ...

  7. 使用ssh-add命令添加ssh私钥时报错

    当使用ssh-add命令添加ssh私钥时,报如下错误: Could not open a connection to your authentication agent. 其实需要先执行如下命令: e ...

  8. Java NIO系列教程(十二) Java NIO与IO

    当学习了Java NIO和IO的API后,一个问题马上涌入脑海: 我应该何时使用IO,何时使用NIO呢?在本文中,我会尽量清晰地解析Java NIO和IO的差异.它们的使用场景,以及它们如何影响您的代 ...

  9. Go的基本类型与变量

    基本类型 布尔型:bool 长度:1字节 取值范围:true,false 注意:不可以用数字代表true或false 整型:int/uint 根据运行平台可能为32或64位 8位整型:int8/uin ...

  10. 第七章 过滤器基础 Filter

    简介:SUN从Servlet2.3开始添加一项激动人心的功能,就是过滤器(Filter).WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图 ...