有一个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/DB或Presenter层)。 在这个repo中,您可以找到一个很好的Android应用程序示例,该示例由MVP与Ormlite数据库混搭开发,使用RxJava和Dagger:https://github.com/mmirhoseini/marvel
我希望这对你有帮助。