如何让 Dialog 不消失
Android,dialog,
2015-03-06 13:38:08
在做项目的时候,可能会碰到这样的需求,弹一个 Dialog ,用户输入信息,点击确认的时候进行验证,如果输入的信息有误或者不合法,需要让用户继续修改,但是这个时候 Dialog 已经消失了,让 Dialog 再弹出来吗?可不可以让 Dialog 不消失呢?
通过查看源码可以看到,(我其实是先在网上看的,然后再去看的代码),在 android.app.Dialog 类里,dismiss() 方法是 public 的,供需要消失的时候调用的,但 dismiss() 最终调用的是 dismissDialog() ,这个方法才是最终的实现。在 dismiss dialog 的时候,它会判断 mShowing ,如果 mShowing 为 true ,就继续执行,最终 dismiss dialog 。如果 mShowing 为 false ,方法结束,直接 return。
那么我们能做的事情就是让 mShowing 为 false ,虽然现在 dialog 还显示着。但是 mShowing 是 private 的,也没有其他公开的方法可以修改这个变量的值,这就需要用到反射,修改 mShowing 的值。大概其的代码是这样子的。
Field field = dialog.getClass().getSuperclass().getDeclaredField("mShowing");
field.setAccessible(true);
field.set(dialog, true);