Android中利用反射机制来控制AlertDialog窗口不被关闭

在项目中我们经常会遇到需要在AlertDialog做一些业务选项,此时如果我们要控制选项没有被选中,就不让AlertDialog关闭,并提示用户。在Android中,因为系统封装了AlertDialog的修改,没有对外提供修改接口,所以我们不能直接控制关闭。此时我们可以利用反射机制,获取dialog中控制关闭的变量,修改该值即可完美控制AlertDialog显示和关闭了。

在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,对话框)