#android #sqlite #android-recyclerview #rx-java #mvp
#Android #sqlite #android-recyclerview #rx-java #mvp
Вопрос:
Существует RecyclerViewAdapter, который показывает элементы (эти элементы уже сопоставлены в базе данных).
RecyclerViewAdapter содержит ссылку на Presenter для загрузки элементов. Также он содержит 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);
}
P.S.
- Каждый элемент хранит довольно размытую информацию, поэтому я думаю, что это плохая идея хранить все полные объекты item в RecyclerView (может быть, я ошибаюсь??? и это нормально).
- Я знаю, как загружать элементы в фоновый поток с помощью Rx, но меня смущает это решение. Я могу создать подписчика в RecyclerView и передать его на уровень presenter, где он будет подписан на observable, который будет выдавать элемент из базы данных. Является ли это приемлемым решением?
Ответ №1:
Прежде всего, я должен упомянуть, что до тех пор, пока вы хотите загружать данные из базы данных, вы должны быть готовы к зависанию пользовательского интерфейса из-за низкой скорости ввода-вывода.
Я не имею ни малейшего представления о том, насколько велики ваши данные, но в худшем случае вы можете загружать их в память постранично. Однако устройства Android не являются хорошим решением для управления большими данными.
Кстати, создавать observable внутри адаптера (т. Е. View) не очень хорошая идея, и они должны быть созданы в вашей бизнес-логике (например, на уровне API Service / DB или Presenter).
В этом репозитории вы можете найти хороший образец приложения для Android, разработанного MVP с использованием mash-up базы данных Ormlite с использованием RxJava и Dagger:
Надеюсь, это поможет 🙂
Комментарии:
1. Большое спасибо за отличный пример 😉