Получите результат действия пользовательского интерфейса с сопрограммами вместо обратных вызовов - PullRequest
1 голос
/ 27 марта 2019

У меня есть функция, которая создает alertDialog со списком имен пользователей, и я хочу вернуть выбранное имя пользователя из alertDialog в качестве вывода функции.Я использую сопрограммы, чтобы обернуть обратные вызовы.

Проблема заключается в том, что код не ждет, когда пользователь выберет имя пользователя из AlertDialog.

Как заставить код ждать, пока пользователь выберет имя пользователя из AlertDialog?

suspend fun showUserSelectionDialog(usersAndEmails: Map<String, String>) : String? = suspendCancellableCoroutine { cont ->
    val users: Array<String> = usersAndEmails.keys.toTypedArray()
    val builder = AlertDialog.Builder(activity)
    builder.setTitle("Select your username")
            .setItems(users) { _, which ->
                val username = users[which]
                cont.resume(usersAndEmails[username])
            }
            .setCancelable(true)
            .setOnCancelListener {
                cont.resume(null)
            }

    val dialog: AlertDialog = builder.create()
    dialog.show()
}
GlobalScope.launch(Dispatchers.Main) {
    var username: String? = userSelector.showUserSelectionDialog(usernamesAndEmails)
}

Спасибо!

...