如何通过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()
}
相关推荐
wang_peng16 分钟前
android studio 基础
android·ide·android studio
〆、风神2 小时前
EasyExcel 数据字典转换器实战:注解驱动设计
android·java·注解
stevenzqzq2 小时前
Android studio xml布局预览中 Automotive和Autotive Distant Display的区别
android·xml·android studio
QING6183 小时前
Kotlin commonPrefixWith用法及代码示例
android·kotlin·源码阅读
QING6183 小时前
Kotlin groupByTo用法及代码示例
android·kotlin·源码阅读
兰琛9 小时前
Compose组件转换XML布局
android·xml·kotlin
水w10 小时前
【Android Studio】解决报错问题Algorithm HmacPBESHA256 not available
android·开发语言·android studio
隐-梵12 小时前
Android studio进阶教程之(二)--如何导入高德地图
android·ide·android studio
南宫生12 小时前
Java迭代器【设计模式之迭代器模式】
java·学习·设计模式·kotlin·迭代器模式
Kika写代码13 小时前
【Android】界面布局-线性布局LinearLayout-例子
android·gitee