addOnSuccessListener
не будет вызываться одновременно с назначением, сопрограмма завершится до завершения. Вы можете вызвать updateAdapter
после forEach l oop.
Пример:
// onCreate
CoroutineScope(Dispatchers.Main).launch {
getImages()
}
private suspend fun getImages() =
withContext(Dispatchers.IO) {
storageReference.listAll().addOnSuccessListener { listResult ->
listResult.items.forEach { storageRef ->
storageRef.downloadUrl.addOnSuccessListener {
imageList.add(ImageItem(it))
}
}
updateAdapter()
}
}
Или вы можете использовать suspendCoroutine, если вы хотите использовать ту же архитектуру, которую используете в настоящее время.
// onCreate
CoroutineScope(Dispatchers.Main).launch {
getImages()
updateAdapter()
}
private suspend fun getImages() =
withContext(Dispatchers.IO) {
suspendCoroutine { cont ->
storageReference.listAll().addOnSuccessListener { listResult ->
listResult.items.forEach { storageRef ->
storageRef.downloadUrl.addOnSuccessListener {
imageList.add(ImageItem(it))
}
}
cont.resume(Unit)
}
}
}