如何通过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()
}
相关推荐
城东米粉儿3 小时前
Android AIDL 笔记
android
城东米粉儿4 小时前
Android 进程间传递大数据 笔记
android
城东米粉儿4 小时前
Android KMP 笔记
android
冬奇Lab5 小时前
WMS核心机制:窗口管理与层级控制深度解析
android·源码阅读
松仔log6 小时前
JetPack——Paging
android·rxjava
城东米粉儿6 小时前
Android Kotlin DSL 笔记
android
城东米粉儿6 小时前
Android Gradle 笔记
android
城东米粉儿6 小时前
Android Monkey 笔记
android
城东米粉儿7 小时前
Android 组件化 笔记
android