文档章节

Dialog使用心得(完善中)

DB_BOY
 DB_BOY
发布于 2016/05/10 09:54
字数 508
阅读 53
收藏 0

####0、创建Dialog时报错

android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application

导致报这个错是在于new AlertDialog.Builder(mContext),虽然这里的参数是AlertDialog.Builder(Context context)但我们不能使用getApplicationContext()获得的Context,而必须使用Activity,因为只有一个Activity才能添加一个窗体。

解决方法:

将new AlertDialog.Builder(Context context)中的参数用Activity.this(Activity是你的Activity的名称)来填充就可以正确的创建一个Dialog了。 

AlertDialog.Builder builder = new Builder(Activity.this);

AlertDialog create = builder.create();


####1、点击边界dialog不消失

解决方法2种:(AlertDialog)

1).builder.setCancelable(false);

2).create.setCanceledOnTouchOutside(false);

对于纯Dialog类来说,点击边界消失,需要设置以下属性


    dialog.setCanceledOnTouchOutside(true);

    dialog.setCancelable(true);


####2、点击按钮dialog不立即关闭

解决方法

利用反射,获得Dialog#mShowing的值,置为false,代表不关闭Dialog


try  

{  

    Field field = dialog.getClass().getSuperclass().getDeclaredField("mShowing");  

    field.setAccessible(true);  

    // 将mShowing变量设为false,表示对话框已关闭  

    field.set(dialog, false);

    dialog.dismiss();

}  

catch (Exception e){  } 

将上面的代码加到按钮的单击事件代码中,就再也无法关闭对话框了。如果要关闭对话框,只需再将mShowing设为true即可。要注意的是,在一个按钮里设置了mShowing变量,也会影响另一个按钮的关闭对话框功能,因此,需要在每一个按钮的单击事件里都设置mShowing变量的值。

####3、在AlertDialog执行过show()方法后,去改变AlertDialog的Title,Message。

开发过程中,遇到的比较特殊的需求,是需要在同一个dialog的展示过程中动态更改Dialog的标题或者Message。

一般的,在执行builder.show()的时候,会去创建一个AlertDialog,将这个AlertDialog接收到,在执行修改message 的时候使用dialog的setMessage()方法去修改。

builder.setMessage("修改前的message");

AlertDialog dialog= builder.show();

dialog.setMessage("修改后的值");


© 著作权归作者所有

DB_BOY

DB_BOY

粉丝 8
博文 20
码字总数 5115
作品 0
朝阳
程序员
私信 提问
DWZ 文件下载后关闭dialog,并刷新NavTab

如上图是一个dialog,选择直接下载后,会产生一个需要下载的文件,我再下载后想关闭此dialog,并刷新NavTab,不知道怎么做 dialogAjaxDoneRefreshNavTabiframeCallback(this,dialogAjaxDoneRefre...

AN安分分
2015/07/27
719
2
Vue 实现双向绑定的几种方法

v-model 指令 上例不过是一个语法糖,展开来是: 2. .sync 修饰符 这也是一个语法糖,剥开来是: my-dialog 组件在 visible 变化时 即可。 3. model 属性 (JSX/渲染函数中) Vue 在 2.2.0 版本...

peakedness丶
2018/12/07
268
1
探秘 widget 之 launcher 添加 widget 的流程分析

最近打算研究下android的widget相关问题,并把一些心得在此稍作记录,哈哈,等研究完成了,如果有必要的话,也会把改动的源码贴出来,以飨读者。今天先来看看launcher2中添加widget的流程。 ...

鉴客
2011/09/25
5.3K
1
Dialog自定义位置显示

今天要做点击一个按钮,点击弹出下拉对话框,这个对话框样子就跟html的dropdown list一样,盖在原布局上面。本来是想用menu做,但是由于这个按钮只是整个界面中很小的一个,不固定,用menu还...

球球
2016/11/30
53
0
layer 1.9 发布,国产 Web 弹层不懈的追求者

layer历经三年考验,已经清楚地懂得了人们最需要的是什么,因此这一版的核心是做减法,不仅剔除了部分冗余的API,对包括layer.ext.js在内的代码也进行了大量瘦身(所以请不要覆盖升级),lay...

贤心
2015/04/19
9.9K
36

没有更多内容

加载失败,请刷新页面

加载更多

DDD(五)

1、引言 之前学习了解了DDD中实体这一概念,那么接下来需要了解的就是值对象、唯一标识。值对象,值就是数字1、2、3,字符串“1”,“2”,“3”,值时对象的特征,对象是一个事物的具体描述...

MrYuZixian
今天
3
0
数据库中间件MyCat

什么是MyCat? 查看官网的介绍是这样说的 一个彻底开源的,面向企业应用开发的大数据库集群 支持事务、ACID、可以替代MySQL的加强版数据库 一个可以视为MySQL集群的企业级数据库,用来替代昂贵...

沉浮_
今天
4
0
解决Mac下VSCode打开zsh乱码

1.乱码问题 iTerm2终端使用Zsh,并且配置Zsh主题,该主题主题需要安装字体来支持箭头效果,在iTerm2中设置这个字体,但是VSCode里这个箭头还是显示乱码。 iTerm2展示如下: VSCode展示如下: 2...

HelloDeveloper
今天
6
0
常用物流快递单号查询接口种类及对接方法

目前快递查询接口有两种方式可以对接,一是和顺丰、圆通、中通、天天、韵达、德邦这些快递公司一一对接接口,二是和快递鸟这样第三方集成接口一次性对接多家常用快递。第一种耗费时间长,但是...

程序的小猿
今天
6
0
Python机器学习之数据探索可视化库yellowbrick

背景介绍 从学sklearn时,除了算法的坎要过,还得学习matplotlib可视化,对我的实践应用而言,可视化更重要一些,然而matplotlib的易用性和美观性确实不敢恭维。陆续使用过plotly、seaborn,...

yeayee
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部