Android设置AlertDialog打开后不消失

最近项目收尾,一堆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:

 1 public class MainActivity extends ActionBarActivity {
 2
 3     Button btn;
 4
 5     @Override
 6     protected void onCreate(Bundle savedInstanceState) {
 7         super.onCreate(savedInstanceState);
 8         setContentView(R.layout.activity_main);
 9
10         btn = (Button) findViewById(R.id.btn);
11         btn.setOnClickListener(new OnClickListener() {
12
13             @Override
14             public void onClick(View v) {
15                 // TODO Auto-generated method stub
16                 AlertDialog.Builder builder = new Builder(MainActivity.this,
17                         AlertDialog.THEME_HOLO_LIGHT);
18                 builder.setTitle("Test");
19                 builder.setMessage("Try to push the OK button and the dialog won`t dismiss do it now !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
20                 builder.setPositiveButton("OK",
21                         new DialogInterface.OnClickListener() {
22
23                             @Override
24                             public void onClick(DialogInterface dialog,
25                                     int which) {
26                                 // TODO Auto-generated method stub
27                                 try {
28                                     Field field = dialog.getClass()
29                                             .getSuperclass()
30                                             .getDeclaredField("mShowing");
31                                     field.setAccessible(true);
32                                     field.set(dialog, false); // 此处设为true则可以关闭
33                                 } catch (Exception e) {
34                                     e.printStackTrace();
35                                 }
36
37                                 AlertDialog.Builder confirmDlg = new Builder(
38                                         MainActivity.this,
39                                         AlertDialog.THEME_HOLO_DARK);
40                                 confirmDlg.setTitle("confirm");
41                                 confirmDlg
42                                         .setMessage("Do you want to do the action?");
43                                 confirmDlg.create().show();
44
45                             }
46                         });
47
48                 builder.setNegativeButton("Cancel",
49                         new DialogInterface.OnClickListener() {
50
51                             @Override
52                             public void onClick(DialogInterface dialog,
53                                     int which) {
54                                 // TODO Auto-generated method stub
55                                 try {
56                                     Field field = dialog.getClass()
57                                             .getSuperclass()
58                                             .getDeclaredField("mShowing");
59                                     field.setAccessible(true);
60                                     field.set(dialog, true);
61                                 } catch (Exception e) {
62                                     e.printStackTrace();
63                                 }
64                             }
65                         });
66
67                 builder.create().show();
68             }
69         });
70
71     }
72 }
时间: 2024-12-20 16:43:42

Android设置AlertDialog打开后不消失的相关文章

Android中 Alertdialog对话框点击消失?

在开发的时候遇到一个问题,就是一触摸对话框边缘外部,对话框会自动消失.这个问题很纠结啊,查找了一下发现从Android 4.0开始,AlertDialog有了变化,就是在触摸对话框边缘外部,对话框会自动消失,查了源码,找到解决办法: 研究其父类时候发现,可以设置这么一条属性,在AlertDialog.Builder.create()之后才能调用这两个方法 方法一: setCanceledOnTouchOutside(false);调用这个方法时,按对话框以外的地方不起作用.按返回键还起作用 方法

Eclipse打开后项目文件消失

Eclipse用的好好的,突然一天打开后原来的项目文件在Package Explorer里全部消失,不见了,但所有的项目工程文件都在原来的目录下,不知为何,baidu了一些方法,通过"Import"重新导入项目. Import-->Existing Projects into Workspace-->Browse-->选择自己工作空间的项目-->导入即可:

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

(转自:http://blog.csdn.net/winson_jason/article/details/8485524) 当我们在用到Android alertDialog创建对话框 的时候,我们会遇到一个问题就是:我们添加的按钮不论是用setNegativeButton还是用setPositiveButton添加的按钮,点击的时候,都会关闭对话框,但是我们的一 些实际需求,就需要保留这个对话框不动,例如输入校验码,密码之类的校验问题,如果用户输入错误,而关闭后弹出对话框,就很别扭了. 在网

Android设置大字体后文字被遮盖、显示补全问题解决

原先的字体单位SP,sp(与密度和字体缩放度无关的像素):与dp类似,但是可以根据用户的字体大小首选项进行缩放. 用户的字体设置放大时,会导致遮盖等问题出现. 解决方案一: 自动适应,不设置高度等信息.这导致程序开发和维护难度加大!因为实现谁也无法预知大小,局部要底对齐,导致界面布局非常麻烦,需要在程序运行时获取.多个对齐就要多次处理! 解决方案二: 经测试发现系统和一些应用采用字体单位SP,也有部分软件采用DP,可以到字体配置更改时,大小依旧不变. 采用SP的APP有:所有Android系统应

Android设置AlertDialog中按钮的可用(Enable)状态

弹出一个保存文件的对话框,要控制输入内容限制,同时内容为空时保存按钮不可用.直接上代码: LayoutInflater mInflater = LayoutInflater.from(mActivity); View saveView = mInflater.inflate(R.layout.alert_dlg_save, null); // 设置输入文件名的EditText属性 final EditText filename = (EditText) saveView.findViewById

js弹框3秒后自动消失

开发中有时候会需要最出弹框后,过几秒自动消失的效果,下面给大家分享一下我自己做的一个小案例. 案例中的弹框使用的是bootstrap里面的模态框,实现自动消失则用的是js中的setInterval方法.该弹框使用了jquery-ui中的draggable方法,可拖动. 目录结构如下: 下面是案例代码: demo.html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <ti

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

int x = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Size.Width - this.Size.Width - 5; int y = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Size.Height - this.Size.Height - 5; this.SetDesktopLocation(x, y); 注释:System.Windows.Forms.S

安卓工作室 android studio 汉化后,报错。 设置界面打不开。Can&#39;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 interface cannot be opened. 安卓工作室 android studio 版本 2.3.3 Android studio version 2.3.3 汉化包版本 AndroidStudio_v2.0.0.20_resources_cn-v0.2-20170414.jar Lo

Android应用被卸载后,自动使用 浏览器打开指定连接

本文,提供"Android应用被卸载后,自动使用 浏览器打开指定连接"的方法. 原理:在安卓程序中某处,基于JNI调用C代码开启一个子进程监控应用在系统中的文件目录,一旦应用被卸载,该目录将会被系统删除,此时触发子进程执行相关代码(本例调用浏览器执行打开一个连接) 1.在安卓项目下创建jni目录 2.在jni目录下创建文件observer.c /* * Copyright (C) 2009 The Android Open Source Project * * Licensed und