Android 分页库 - 映射房间 DataSource.Factory<*, DatabaseModel> 到 DataSource.Factory<*, PresenterModel>

Android Paging Library - Map Room DataSource.Factory<*, DatabaseModel> to DataSource.Factory<*, PresenterModel>

我在我的应用中使用了两个模型:

  1. 数据库
  2. 主持人(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 是一个进行转换的扩展函数