如何使用RxJava从DB加载数据到RecyclerView ?(MVP + RxJava + SQLite)



有一个RecyclerViewAdapter显示项目(这些项目已经在数据库中映射)。

RecyclerViewAdapter包含对Presenter的引用来加载项目。它还包含带有项目ID的ArrayList。

如何使用Rx加载项目?如何为onBindViewHolder方法寻找正确的代码?

现在看起来像:

List<Long> ItemIds; 
Presenter presenter;
public void onBindViewHolder(ViewHolder holder, int position) {
   Long itemId = ItemIds.get(position);
   Item item = presenter.getItemById(itemId); //loading from DB
   holder.setContent(item);
}

注:

  • 每个项目存储相当多的信息,所以我想这是坏主意,保持所有完整的项目对象在RecyclerView(也许我错了??
  • 我知道如何使用Rx在后台线程加载项目,但我对这个决定感到困惑。我可以在RecyclerView中创建订阅者,并将其传递给演示层,在那里它将被订阅到可观察对象,这将从DB发出Item。这是可以接受的解决方案吗?

首先,我必须提到,只要你想从DB加载数据,你就必须准备好一个延迟的UI,因为I/o缺乏速度。

我不知道你的数据有多大,但在最坏的情况下,你可以一页一页地加载到内存中。然而,Android设备并不是大数据管理的好解决方案。

顺便说一下,在适配器内创建可观察对象(即View)不是一个好主意,它们必须在您的业务逻辑中创建(例如API Service/DBPresenter层)。 在这个repo中,您可以找到一个很好的Android应用程序示例,该示例由MVPOrmlite数据库混搭开发,使用RxJavaDagger:
https://github.com/mmirhoseini/marvel

我希望这对你有帮助。

相关内容

  • 没有找到相关文章

最新更新