最近项目收尾,一堆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. centos 7 Mysql5.7 主从复制配置

    1.环境 Centos 7 Mysql 5.7 Master  192.168.1.71 Slave01 192.168.1.72 2.分别配置master,slave01 # vi /etc/my. ...

  2. PHP设计模式:观察者模式

    示例代码详见https://github.com/52fhy/design_patterns 观察者模式 观察者模式(Observer)是对象的行为模式,又叫发布-订阅(Publish/Subscri ...

  3. Vue笔记:使用 VS Code 断点调试

    直接在 Chrome 的调试窗口中调试 Vue 代码有诸多不便, 好在 Visual Studio Code 中提供了 Debugger for Chrome 插件,能够通过配置直接在 VS Code ...

  4. WPF设置控件获取键盘焦点时的样式FocusVisualStyle

    控件获取焦点除了用鼠标外,可以通过键盘来获取,比如Tab键或者方向键等,需要设置控件获取键盘焦点时的样式,可以通过设置FrameworkElemnt.FocusVisualStyle属性, 因为几乎所 ...

  5. Customizing docker

    Customizing docker The Docker systemd unit can be customized by overriding the unit that ships with ...

  6. Golang 方法method

    方法method Go中虽没有class,但依旧有method 通过显示说明receiver来实现与某个类型的结合 只能为同一个包中的类型定义方法 receiver可以是类型的值或者指针 不存在方法重 ...

  7. (转)Spring常见注解总结

    传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop.事物,这么做有两个缺点: 1.如果所有的内容都配置在.xml文件中,那么.xml文件将会十分庞大:如果按需求分开.xml文 ...

  8. Java maven项目的小随笔

    1.web.xml里面有filter拦截设置,注意. 2.编译之后,网页中读取资源的路径是apache-tomcat/wtpwebapps/..,若该路径下没有相应资源,则报404错误.

  9. 如何查看是否安装.NET Framework、.NET Framework的版本号以及CLR版本号

    查看是否安装.NET Framework→%SystemRoot%\System32→如果有mscoree.dll文件,表明.NET Framework已安装 查看安装了哪些版本的.NET Framw ...

  10. net 自定义泛型那点事

    泛型概述 泛型是程序设计语言的一种特性.允许程序员在强类型程序设计语言中编写代码时定义一些可变部分,那些部分在使用前必须作出指明.各种程序设计语言和其编译器.运行环境对泛型的支持均不一样.将类型参数化 ...