Мой MVP-докладчик привязан к представлению в onResume, так что открепление гарантировано.Это означает, что иногда, например, когда данные поступают из onActivityResult (), представление не привязано, но мы все еще хотим коснуться представления, показать прогресс и т. Д. До сих пор я использовал для этого флаг и выполнял эти действия вbindView () или в updateView (), который вызывается, когда представление связано.
Теперь я использую Kotlin, поэтому я подумал, что, если бы я использовал список лямбд для этого в BasePresenter?Это то, что я имею до сих пор:
typealias AnyLambda = () -> Unit
private val deferredActions = mutableListOf<AnyLambda>()
private val funShowProgress : () -> Unit = {
view()?.showProgress() }
override fun updateView() {
deferredActions.forEach { anyLambda ->
anyLambda()
deferredActions.remove(anyLambda)
}
}
fun onSomethingFromActivity(x: List<Y>) {
...
deferredActions.add { funShowProgress }
}
Проблема в том, что лямбда не вызывается в forEach.Если я добавлю funShowProgress () внутри лямбды, это будет работать.Также есть лямбда, потому что она запускается внутри forEach ровно один раз, но view.showProgress () не вызывается.Что я не так понял в лямбдах?
Обратите внимание, что хотя я могу вызывать showProgress () прямо из представления, я хочу этого избежать.