Kotlin Android开发:弹窗2显示时如何自动隐藏加载弹窗1
可以实现,核心思路是全局持有加载弹窗(弹窗1)的实例,在显示弹窗2前主动关闭弹窗1即可。
实现步骤
- 声明全局的加载弹窗变量
在你的Activity/Fragment的类内部、方法外层,声明可空的AlertDialog变量,用于持有弹窗1的实例:
private var loadingDialog: AlertDialog? = null
- 显示弹窗1(加载提示弹窗)时,将返回的实例赋值给全局变量
不要直接链式调用show()就结束,需要接收show()方法返回的AlertDialog实例:
// 事件触发时调用这段代码显示加载弹窗 loadingDialog = AlertDialog.Builder(requireActivity()) .setTitle("提示") .setMessage("事件加载中,请稍候...") .setCancelable(false) // 可选配置,禁止用户手动关闭加载弹窗 .show()
- 显示弹窗2前先关闭弹窗1
加载完成后要显示结果弹窗时,先判断加载弹窗是否存在且处于显示状态,先关闭再显示你的弹窗2即可:
// 先关闭加载弹窗 loadingDialog?.takeIf { it.isShowing }?.dismiss() loadingDialog = null // 置空避免内存泄漏 // 再显示你的成功弹窗 AlertDialog.Builder(requireActivity()) .setTitle("上传状态") .setMessage("图片上传成功!") .setPositiveButton(android.R.string.yes) { dialog, which -> // 你的业务逻辑 } .setIcon(R.drawable.ic_check_success) .show()
额外注意事项
页面销毁时要主动关闭未消失的加载弹窗,避免出现窗口泄漏异常,可以在onDestroy(Activity场景)或者onDestroyView(Fragment场景)中添加如下代码:
override fun onDestroyView() { loadingDialog?.takeIf { it.isShowing }?.dismiss() loadingDialog = null super.onDestroyView() }
内容的提问来源于stack exchange,提问作者Bluechip Servers
相关产品推荐
相关产品推荐

