【发布时间】:2020-06-21 13:19:57
【问题描述】:
在 Android 中,我有一个 ListAdapter,我使用 Kotlin 的 lambda 表示法将回调传递给它。
例如,ListAdapter 有:
var clickCallback = { _: Long -> Unit }
在调用 ListAdapter 的 Fragment 中设置:
mAdapter.clickCallback = {id: Long -> selectItem(id)}
这个 Fragment 函数 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)
})
如果您知道如何在 ListAdapter 中获取 viewLifecycleOwner,则可以加分。我只是猜测它是 holder.ItemView。
谢谢!
约翰
【问题讨论】:
-
不知道你想用
{}创建一个 lambda,但可能你想做:clickCallback: (Long) -> LiveData<String>。