Zai*_*ain 33 android android-livedata android-livedata-transformations
将生命周期依赖项从 升级到 后,2.6.0-alpha04我2.6.0-beta01得到了未解决的参考:转换并且它无法import androidx.lifecycle.Transformations分类。
import androidx.lifecycle.Transformations
...
var myList: LiveData<List<Bookmark>> = Transformations.switchMap(
bookMarkType
) { input: Int? ->
when (input) {
ARTICLE_BOOKMARK -> return@switchMap repository.articleBookmarks
WEBSITE_BOOKMARK -> return@switchMap repository.websiteBookmarks
LINK_BOOKMARK -> return@switchMap repository.linkBookmarks
}
repository.websiteBookmarks
}
Run Code Online (Sandbox Code Playgroud)
Zai*_*ain 88
转换现在是用 Kotlin 编写的。对于那些直接使用 Transformations.map 等语法的 Kotlin 编写的类来说,这是一个源不兼容的更改 - Kotlin 代码现在必须使用 Kotlin 扩展方法语法,而该语法以前仅在使用生命周期-livedata-ktx 时可用。使用 Java 编程语言时,这些采用 androidx.arch.core.util.Function 方法的方法版本已被弃用,并替换为采用 Kotlin Function1 的版本。
因此,Transformations您需要直接使用扩展函数,而不是使用myLiveData.switchMap,或者myLiveData.map
因此,要解决此问题,请使用:
var myList: LiveData<List<Bookmark>> = bookMarkType.switchMap { input: Int? ->
when (input) {
ARTICLE_BOOKMARK -> return@switchMap repository.articleBookmarks
WEBSITE_BOOKMARK -> return@switchMap repository.websiteBookmarks
LINK_BOOKMARK -> return@switchMap repository.linkBookmarks
}
repository.websiteBookmarks
}
Run Code Online (Sandbox Code Playgroud)
小智 5
Zain给出了一个很棒的答案,但只是为了详细说明和概括那些尝试使用 Transformations.map() 将一种类型的 LiveData 转换为另一种类型并遇到“未解决的参考...”问题的人。
如果您有“T”类型的 LiveData,并且想要使用 Transformations.map() 将其转换为“X”类型的 LiveData,那么您现在可以执行以下操作(从 Lifecycle_version >= 2.6.0 开始)
val oldTypeLiveData : LiveData<T> = ...
val newTypeLiveData : LiveData<X> = oldTypeLiveData.map{
...pass your lambda to provide implementation for the transformation
}
Run Code Online (Sandbox Code Playgroud)
这是Android 开发者的参考
| 归档时间: |
|
| 查看次数: |
13085 次 |
| 最近记录: |