В Android у меня есть ListAdapter, которому я передаю обратные вызовы, используя лямбда-нотацию Kotlin.
Например, ListAdapter имеет:
var clickCallback = { _: Long -> Unit }
Что устанавливается во фрагменте, вызывающем ListAdapter с помощью:
mAdapter.clickCallback = {id: Long -> selectItem(id)}
Эта функция фрагмента selectItem(id: Long)
затем вызывается внутри ListAdapter с помощью:
clickCallback(item.id)
Но что, если эта переданная функция selectItem()
вернул значение, например LiveData, а что, если бы я хотел вызвать эту функцию и наблюдать за LiveData изнутри адаптера? Я не могу, хоть убей, понять, как передать такую функцию, чтобы можно было наблюдать функцию обратного вызова внутри ListAdapter.
Это даже близко не работает, но, надеюсь, это должно дать вам представление о том, какое решение я ищу:
var clickCallback:LiveData<String> = { _: Long -> Unit?? }
....
clickCallback(item.id).observe(holder.ItemView, Observer { answerString ->
doSomethingTo(answerString)
})
Бонусные баллы, если вы знаете, как получить viewLifecycleOwner внутри ListAdapter. Я просто догадываюсь, что это держатель.ItemView.
Спасибо!
Джон