如何破解DataSource以使用静态数据? (将List <T>转换为DataSource <Int,T>)

时间:2019-12-19 12:12:42

标签: java android kotlin android-livedata

我有一个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>
    }
}

1 个答案:

答案 0 :(得分:0)

首先,在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添加元素-我在此示例中使用了