2

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

  1. 数据库
  2. 演示者(用户界面)

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) 完成的任何方法持开放态度。

4

1 回答 1

-1

这是我的做法

数据源

fun getDataSource(): DataSource.Factory<Int, DBModel> {
     return database.dao.getAllData()
   }

视图模型中的变量

val scannedCompleteList=App.getRepository().getDataSource().toLiveData(
                Config(
                    pageSize = 60,
                    enablePlaceholders = true,
                    maxSize = 200
                )
            )

现在我有一个绑定适配器,我将数据从 db 模型转换为域模型

@BindingAdapter("setData")
fun setImageScanned(recyclerView: RecyclerView, data: List<DBModel>?) {
        val adapter = recyclerView.adapter as MyAdapter
        adapter.submitList(it.asDomainModel())
    }
}

因此,您正在观察片段中的数据,因此您可以将数据转换为观察者内部的演示者。asDomainModel 是一个扩展函数,它进行转换

于 2020-06-06T11:38:27.987 回答