如何通过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()
}
相关推荐
乾坤一气杀19 分钟前
Kotlin 协程线程切换原理 —— 以 Dispatchers.IO 为例
android
小书房1 小时前
Android各版本主要新特性
android
兄弟加油,别颓废了。1 小时前
ctf.show_web3
android
火柴就是我1 小时前
代码记录android怎么实现状态栏导航栏隐藏
android·flutter
梦里花开知多少2 小时前
浅谈ThreadPool
android·面试
帅次2 小时前
单例初始化中的耗时操作如何拖死主线程
android·webview·android runtime
用户0874881999172 小时前
Android 资源类型全解析及四大常用布局资源深度指南
android
海盐芝士不加糖2 小时前
我又又又辞职了,然后做了一款“离线版微信”
kotlin·app·android jetpack
火锅鸡的味道2 小时前
解决AOSP工程Android Studio打开卡顿
android·python·android studio