),java,android,kotlin,android-livedata"/>

首页 > 解决方案 > 如何破解 DataSource 以使用静态数据?(转换列表到数据源)

问题描述

我有一个 UI 组件,它接受LiveData<PagedList<T>>但在一种情况下,我需要将它用于直接从 RecycleViewer 传递的数据(RecycleViewer 产生结构为的输出List<Object>)。我可以轻松地将它映射到Map<Int, Object>,但不能将 Map 转换为 DataSource,因此我需要以某种方式将其转换为DataSource<Int, Object>或直接转换为<PagedList<Object>>

我尝试了以下方法,但不幸的是它不起作用->错误是您无法将 MutableMap 转换为 DataSource。有任何想法吗?

class DataSourceFactory(
    val data: List<Object>
) : DataSourceFactory<Object>() {

   override fun create(): DataSource<Int, Object> {

        val mappedData = mutableMapOf<Int, Object>()
        var index = 0
        for (object in data) {
            mappedData[index] = object
            index = +1
        }
        return mappedData as DataSource<Int, Object>
    }
}

标签: javaandroidkotlinandroid-livedata

解决方案


首先,Kotlin 中没有 Object,你应该使用 Any。由于 DataSource 未实现 Map 接口,您会收到错误消息。如果您不想将 Map 接口添加到 DataSource,您可以执行以下操作:

override fun create(): DataSource<Int, Any> {
    val dataSource = DataSource<Int, Any>()
    data.mapIndexed { index, any -> dataSource.put(index, any) }
    return dataSource
}

只需调整方法以将元素添加到 DataSource - 我在此示例中使用了 put


推荐阅读