Android分页库-将Room DataSource.Factory映射到DataSource.Factory

问题描述 投票:0回答:1

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

  1. 数据库
  2. Presenter(UI)

Android Paging给了我DataSource.Factory<*, DatabaseModel>

@Dao
interface ProjectDao {
    @Query("SELECT * FROM project")
    fun getAllProjects(): DataSource.Factory<Int, DatabaseModel>
    ...
}

[当我想使用LiveData制作LivePagedListBuilder(dataSourceFactory, config)时,我需要映射:

DataSource.Factory<*, DatabaseModel>-| ----> DataSource.Factory<*, PresenterModel>

有没有可能实现这一目标的方法。我也欢迎使用RxKotlin(RxJava)完成的任何方法。

android android-room android-jetpack android-paging android-paging-library
1个回答
0
投票

这是我的完成方式

数据源

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是执行转换的扩展函数

© www.soinside.com 2019 - 2024. All rights reserved.