如何通过Kotlin协程, 简化"连续依次弹窗(Dialog队列)"的需求

效果预览

代码预览

kotlin 复制代码
lifecycleScope.launch {
    showDialog("签到活动", "签到领10000币") // 直到dialog被关闭, 才会继续运行下一行
    showDialog("新手任务", "做任务领20000币") // 直到dialog被关闭, 才会继续运行下一行
    showDialog("首充奖励", "首充6元送神装")
}

代码实现

要做到上一个showDialig()在关闭时才继续运行下一个函数,需要用到协程挂起的特性, 然后在 OnDismiss()回调中将协程恢复, 为了将这种基于回调的方法包装成协程挂起函数, 可以使用suspendCancellableCoroutine函数

kotlin 复制代码
suspend fun showDialog(title: String, content: String) = suspendCancellableCoroutine { continuation ->
    MaterialAlertDialogBuilder(this)
        .setTitle(title)
        .setMessage(content)
        .setPositiveButton("我知道了") { dialog, which ->
            dialog.dismiss()
        }
        .setOnDismissListener {
            continuation.resume(Unit)
        }
        .show()
}
相关推荐
baidu_247438612 小时前
Android ViewModel定时任务
android·开发语言·javascript
有位神秘人3 小时前
Android中Notification的使用详解
android·java·javascript
·云扬·3 小时前
MySQL Binlog落盘机制深度解析:性能与安全性的平衡艺术
android·mysql·adb
独自破碎E4 小时前
【BISHI9】田忌赛马
android·java·开发语言
代码s贝多芬的音符5 小时前
android 两个人脸对比 mlkit
android
darkb1rd7 小时前
五、PHP类型转换与类型安全
android·安全·php
gjxDaniel7 小时前
Kotlin编程语言入门与常见问题
android·开发语言·kotlin
csj507 小时前
安卓基础之《(22)—高级控件(4)碎片Fragment》
android
峥嵘life8 小时前
Android16 【CTS】CtsMediaCodecTestCases等一些列Media测试存在Failed项
android·linux·学习
stevenzqzq9 小时前
Compose 中的状态可变性体系
android·compose