2016-10-21 3 views
1

Существует RecyclerViewAdapter, который показывает элементы (эти элементы уже сопоставлены в базе данных).Как загрузить данные в RecyclerView из БД с помощью RxJava? (MVP + RxJava + SQLite)

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.

  • В каждом элементе хранится информация о хорошем тишине, поэтому я думаю, что это плохая идея сохранить все объекты предметов в RecyclerView (может быть, я ошибаюсь ??? и это okey).
  • Я знаю, как загружать элементы в фоновый поток, используя Rx, но я смущен этим решением. Я могу создать подписчика в RecyclerView и передать его на уровень презентатора, где он будет подписан на наблюдаемый, который выдает элемент из БД. Это приемлемое решение?

ответ

2

Прежде всего, я должен упомянуть, что до тех пор, пока вы хотите загрузить данные из БД, вам нужно подготовиться к ломающему пользовательскому интерфейсу из-за отсутствия скорости ввода-вывода.

Я не имею ни малейшего представления о том, насколько велики ваши данные, но в худшем случае вы можете загрузить его на страницу памяти за страницей. Однако устройства Android не являются хорошим решением для управления большими данными.

Кстати, создавая наблюдаемые внутри адаптера (т.е. View) не является хорошей идеей, и они должны быть созданы в вашей бизнес-логики (например API Service/DB или Presenter слой.

В этом репо вы можете найти хороший образец Android приложение, разработанное MVP с Ormlite Database месиво с использованием RxJava и Dagger:

https://github.com/mmirhoseini/marvel

Я надеюсь, что это помогает :)

+1

Спасибо большое за отличный пример;) –

 Смежные вопросы

  • Нет связанных вопросов^_^