Android 分页库 - 映射房间 DataSource.Factory<*, DatabaseModel> 到 DataSource.Factory<*, PresenterModel>
Android Paging Library - Map Room DataSource.Factory<*, DatabaseModel> to DataSource.Factory<*, PresenterModel>
我在我的应用中使用了两个模型:
- 数据库
- 主持人(UI)
Android 分页给了我 DataSource.Factory<*, DatabaseModel>
@Dao
interface ProjectDao {
@Query("SELECT * FROM project")
fun getAllProjects(): DataSource.Factory<Int, DatabaseModel>
...
}
当我想使用 LivePagedListBuilder(dataSourceFactory, config)
制作 LiveData
时,我需要映射:
DataSource.Factory<*, DatabaseModel>
-|---->DataSource.Factory<*, PresenterModel>
有什么办法可以做到这一点。我也对使用 RxKotlin (RxJava) 完成的任何方法持开放态度。
这是我的做法
数据源
fun getDataSource(): DataSource.Factory<Int, DBModel> {
return database.dao.getAllData()
}
视图模型中的变量
val scannedCompleteList=App.getRepository().getDataSource().toLiveData(
Config(
pageSize = 60,
enablePlaceholders = true,
maxSize = 200
)
)
现在我有一个绑定适配器,我可以在其中将数据从数据库模型转换为域模型
@BindingAdapter("setData")
fun setImageScanned(recyclerView: RecyclerView, data: List<DBModel>?) {
val adapter = recyclerView.adapter as MyAdapter
adapter.submitList(it.asDomainModel())
}
}
所以您在片段中观察数据,因此您可以将数据转换为观察者内部的呈现器。
asDomainModel 是一个进行转换的扩展函数
我在我的应用中使用了两个模型:
- 数据库
- 主持人(UI)
Android 分页给了我 DataSource.Factory<*, DatabaseModel>
@Dao
interface ProjectDao {
@Query("SELECT * FROM project")
fun getAllProjects(): DataSource.Factory<Int, DatabaseModel>
...
}
当我想使用 LivePagedListBuilder(dataSourceFactory, config)
制作 LiveData
时,我需要映射:
DataSource.Factory<*, DatabaseModel>
-|---->DataSource.Factory<*, PresenterModel>
有什么办法可以做到这一点。我也对使用 RxKotlin (RxJava) 完成的任何方法持开放态度。
这是我的做法
数据源
fun getDataSource(): DataSource.Factory<Int, DBModel> {
return database.dao.getAllData()
}
视图模型中的变量
val scannedCompleteList=App.getRepository().getDataSource().toLiveData(
Config(
pageSize = 60,
enablePlaceholders = true,
maxSize = 200
)
)
现在我有一个绑定适配器,我可以在其中将数据从数据库模型转换为域模型
@BindingAdapter("setData")
fun setImageScanned(recyclerView: RecyclerView, data: List<DBModel>?) {
val adapter = recyclerView.adapter as MyAdapter
adapter.submitList(it.asDomainModel())
}
}
所以您在片段中观察数据,因此您可以将数据转换为观察者内部的呈现器。 asDomainModel 是一个进行转换的扩展函数