java - 如何破解 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>
}
}
解决方案
首先,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
推荐阅读
- python - python - pickle 引发“没有剩余空间”错误的原因?
- tslint - 打字稿:如何抑制任何分号警告
- codeigniter - 一个字段有 2 个可调用的表单验证规则
- python - Docker - 在服务之间共享本地存储
- javascript - 如何在重定向时重新渲染 React 组件
- bash - bash shell脚本从给定的时间戳中减去毫秒
- python - 如何在python的列表中存储从for循环生成的多个值类型的输出?
- windows-10 - 如何在几个小时之间限制 imacros 脚本的执行?
- python - 正则表达式 - TypeError: '>' 在 'str' 和 'int' 的实例之间不支持
- c++ - 在 Rcpp 中调用“as”没有匹配的函数