Flutter:显示新对话框时隐藏原对话框,关闭后恢复显示
实现从第一个对话框打开第二个时隐藏第一个,关闭第二个后恢复第一个的方案
核心逻辑
- 提前保留第一个
AlertDialog的实例,避免每次重新创建 - 打开第二个对话框前,先关闭第一个
- 给第二个对话框绑定关闭监听,一旦关闭就重新显示第一个对话框
代码示例(Android Kotlin)
先在Activity里定义两个对话框的全局变量:
private var firstDialog: AlertDialog? = null private var secondDialog: AlertDialog? = null
创建第一个对话框的方法:
private fun initFirstDialog() { firstDialog = AlertDialog.Builder(this) .setTitle("第一个对话框") .setMessage("点击按钮打开第二个对话框") .setPositiveButton("打开第二个") { _, _ -> // 先关闭第一个对话框 firstDialog?.dismiss() // 显示第二个对话框 showSecondDialog() } .setNegativeButton("取消", null) .create() }
创建并显示第二个对话框,同时设置关闭回调:
private fun showSecondDialog() { secondDialog = AlertDialog.Builder(this) .setTitle("第二个对话框") .setMessage("关闭我之后第一个对话框会回来") .setPositiveButton("关闭") { _, _ -> secondDialog?.dismiss() } // 监听第二个对话框的关闭事件 .setOnDismissListener { // 重新显示第一个对话框 firstDialog?.show() } .create() secondDialog?.show() }
最后在Activity初始化时启动第一个对话框:
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) initFirstDialog() firstDialog?.show() }
关键注意点
- 处理好对话框实例的空安全,避免空指针崩溃
- 如果遇到屏幕旋转等配置变更,记得在
onSaveInstanceState里保存状态,恢复时重新初始化对话框 - 尽量复用对话框实例,不要频繁创建新的,减少内存泄漏风险
内容的提问来源于stack exchange,提问作者vovaklh
相关产品推荐
相关产品推荐

