android - 如何使内联函数在kotlin中用作侦听器时自行删除
问题描述
我已经遇到了这个问题,我在 SO 中找不到任何问题的解决方案。
我正在使用一种PagingAdapter
来自Google 的 Paging library的方法,它接收一个内联函数作为侦听器:
fun addLoadStateListener(listener: (CombinedLoadStates) -> Unit) {
differ.addLoadStateListener(listener)
}
然后要删除侦听器,他们提供以下方法
fun removeLoadStateListener(listener: (CombinedLoadStates) -> Unit) {
differ.removeLoadStateListener(listener)
}
我正在这样使用它
myPagingAdapter.addLoadStateListener { it: CombinedLoadStates ->
myPagingAdapter.removeLoadStateListener(this)
}
我知道上面的方法不起作用,但是当文件用 java 编写时它起作用了,因为它在自己的函数中对自身有正确的引用。但是,在 Kotlin 中,我根本找不到这样做的方法。我尝试变成一个匿名函数,但它仍然不会传递正确的上下文
myPagingAdapter.addLoadStateListener { fun(it: CombinedLoadStates) ->
myPagingAdapter.removeLoadStateListener(this)
}
在这一点上,我不知道如何删除无法引用自身的内联函数,而且我在任何地方都找不到任何解决方案的文档。
如何通过引用自身在 kotlin 中删除内联函数?
解决方案
如果我理解正确,您需要一个传入的内联函数的引用,addLoadStateListener
以便您可以传入removeLoadStateListener
. 你可以试试这个
myPagingAdapter.addLoadStateListener(object : (String) -> Unit {
override fun invoke(p1: String) {
myPagingAdapter.removeLoadStateListener(this)
}
})
推荐阅读
- sql - How to remove initial null values from case statement?
- lighthouse - Lighthouse 是独立工作还是需要互联网访问?
- javascript - 试图将 filereader.readAsDataURL 放入对象数组中,以便我可以显示拖放事件中的图像
- ruby-on-rails - 排序选择结果
- javascript - Reactjs 将变量传递给另一个类的函数
- python - 在 Python 中的 For 循环每次迭代后创建一个新列
- sql - 使用 SQL Server 查询给定表的所需表输出
- javascript - 如何在函数中实现 Observable
- oracle - 转到过程/函数/包中的特定行
- scala - pyspark 在尝试并行发出 URL 请求时挂起