【问题标题】:Android Paging Library - Map Room DataSource.Factory<*, DatabaseModel> to DataSource.Factory<*, PresenterModel>Android 分页库 - 将 Room DataSource.Factory<*, DatabaseModel> 映射到 DataSource.Factory<*, PresenterModel>
【发布时间】:2020-06-06 11:27:11
【问题描述】:

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

  1. 数据库
  2. 演示者 (UI)

Android Paging 给了我一个DataSource.Factory&lt;*, DatabaseModel&gt;

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

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

DataSource.Factory&lt;*, DatabaseModel&gt; -|----> DataSource.Factory&lt;*, PresenterModel&gt;

有什么办法可以做到这一点。我也对使用 RxKotlin (RxJava) 完成的任何方法持开放态度。

【问题讨论】:

  • 您如何将数据绑定到回收视图?你在使用绑定适配器吗?
  • @Abdul 我在观察它的Fragment 中使用submitList 函数。我想知道有没有办法将数据库映射到 UI 模型。

标签: android android-room android-jetpack android-paging android-paging-library


【解决方案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 是进行转换的扩展函数

【讨论】:

  • 谢谢,非常感谢。如果没有更好的结果,我会将您标记为正确答案。
  • 那会很棒。
  • 这是一个糟糕的解决方案。 UI 甚至不应该得到一个 DBModel
猜你喜欢
  • 1970-01-01
  • 2019-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-04
相关资源
最近更新 更多