android 对话框不消失,如何让 Dialog 不消失

在Android开发中,当需要用户校验输入并保持Dialog显示时,遇到Dialog自动消失的问题。通过分析源码发现,Dialog的`dismiss()`方法在mShowing为true时执行关闭操作。利用反射可以设置mShowing为false,阻止Dialog关闭。然而,这会导致无法正常关闭Dialog,如取消按钮失效。文章探讨了如何在验证失败时保持Dialog显示,以及处理点击屏幕空白区域关闭Dialog的场景。
摘要由CSDN通过智能技术生成

如何让 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);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值