Android中利用反射机制来控制AlertDialog窗口不被关闭
2015-06-17 11:36
393 查看
在项目中我们经常会遇到需要在AlertDialog做一些业务选项,此时如果我们要控制选项没有被选中,就不让AlertDialog关闭,并提示用户。在Android中,因为系统封装了AlertDialog的修改,没有对外提供修改接口,所以我们不能直接控制关闭。此时我们可以利用反射机制,获取dialog中控制关闭的变量,修改该值即可完美控制AlertDialog显示和关闭了。
在AlertDialog的单击事件
中,我们只需要加入如下代码,就成功了!
try
{
Field field = dialog.getClass()
.getSuperclass().getDeclaredField(
"mShowing" );
field.setAccessible( true );
// 将mShowing变量设为false,表示对话框已关闭
field.set(dialog, false );
dialog.dismiss();
}
catch (Exception e)
{
}
,如果在OK按钮中加入了此代码,那么点击Cancle也不能关闭了,此时可以把上段代码放到Cancle的单击事件中,主需要将field.set(dialog, false );中的false更新为true,就完美的解决了此问题!
在AlertDialog的单击事件
new DialogInterface.OnClickListener(){}
中,我们只需要加入如下代码,就成功了!
try
{
Field field = dialog.getClass()
.getSuperclass().getDeclaredField(
"mShowing" );
field.setAccessible( true );
// 将mShowing变量设为false,表示对话框已关闭
field.set(dialog, false );
dialog.dismiss();
}
catch (Exception e)
{
}
,如果在OK按钮中加入了此代码,那么点击Cancle也不能关闭了,此时可以把上段代码放到Cancle的单击事件中,主需要将field.set(dialog, false );中的false更新为true,就完美的解决了此问题!
相关文章推荐
- android开发 android.view.View.OnClickListener和android.content.DialogInterface.OnClickListener冲突
- Android系列---JSON数据解析
- Android属性动画完全解析(上),初识属性动画的基本用法
- Android中传递对象的三种方法
- Android开发之获取assets文件夹中的数据库内容并写入到SD卡中
- Android fill_parent、wrap_content和match_parent的区别
- android studio 快捷键
- android 点击 textview 显示和隐藏 的切换
- Android Xfermode 实战 实现圆形、圆角图片
- Android资源使用详解(二)
- Android中的Interpolator
- Android动画学习笔记-Android Animation
- Android 如何判断一个应用在运行
- Android Studio程序中setText出现中文乱码
- Android GridView属性集合
- Android出现“R cannot be resolved to a variable"
- Android实现用户引导界面
- Android Fragment管理类,操作Fragment的增加、删除、替换、隐藏、显示等
- Android学习【Activity界面跳转】
- Android Activity管理类,管理Activity和退出应用