如何通过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()
}
相关推荐
StackNoOverflow1 天前
MySQL Explain 返回列详解:从入门到实战,附 SQL 与避坑大全
android
CYRUS_STUDIO1 天前
Frida 检测与对抗实战:进程、maps、线程、符号全特征清除
android·逆向
csj501 天前
安卓基础之《(28)—Service组件》
android
lhbian2 天前
PHP、C++和C语言对比:哪个更适合你?
android·数据库·spring boot·mysql·kafka
catoop2 天前
Android 最佳实践、分层架构与全流程解析(2025)
android
ZHANG13HAO2 天前
Android 13 特权应用(Android Studio 开发)调用 AOSP 隐藏 API 完整教程
android·ide·android studio
田梓燊2 天前
leetcode 142
android·java·leetcode
angerdream2 天前
Android手把手编写儿童手机远程监控App之JAVA基础
android
菠萝地亚狂想曲2 天前
Zephyr_01, environment
android·java·javascript
sTone873752 天前
跨端框架通信机制全解析:从 URL Schema 到 JSI 到 Platform Channel
android·前端