Реактивное сопоставление результатов области с ObservableArrayList или чем-то похожим для использования в RecyclerView - PullRequest
0 голосов
/ 18 декабря 2018

Мы создаем приложение, основанное на Realm.Мы имеем следующую ситуацию

  1. Представьте себе базу данных Realm, которая содержит модель области User, которая имеет свойства FirstName и LastName
  2. Список пользователей может меняться в любое время, и списокочень большой и хранится внутри Realm db
  3. Слой представления является представлением переработчика, но внутри представления переработчика нам точно не нужны FirstName и LastName, скорее нам нужен класс-оболочка (давайте назовем его UserViewModel) вокруг него, который будет содержать FullName = FirstName + LastName плюс некоторую дополнительную функциональность
  4. Если бы не было необходимости декорировать объект User области во что-то еще, мы использовали бы RealmRecyclerViewAdapter вместе с RealmResults<User> и он всегда будет синхронизировать наше представление переработчика с исходными данными
  5. Однако, поскольку нам нужно манипулировать данными и расширять их с помощью некоторых дополнительных свойств, нам нужен другой подход

Первым решением, которое мне пришло в голову, было использование расширений RxJava для Realm и Android для достижения этой цели.Псевдокод очень прост в теории

  1. Обрабатывать результаты, возвращаемые областью, как поток элементов
  2. Сопоставлять модель пользователя с UserViewModel
  3. Прослушивать изменения потока изаново заполнить представление рециркулятора с соответствующими изменениями

Однако я не смог реализовать это.Rx-расширения Realm содержат 2 типа методов - asFlowable и asChangeSetObservable.Первый возвращает Flowable<RealmResults<User>>, второй возвращает Observable<ChangeSet<RealmResults<User>>>.Кажется, мне следует использовать asChangeSetObservable, поскольку он предоставляет все детали, которые изменились, и в конечном итоге я могу распространить эти события обратно на RecyclerView.

Я также думал о повторном использовании разработанного мною элемента управления, который прекрасно сочетается с ObservableArrayList и создает вокруг него универсальный RecyclerViewAdapter, который обрабатывает все изменения коллекции.В этом случае моей проблемой, скорее всего, будет получение результатов из области, выполнение некоторых функций Rx и сопоставление результатов с ObservableArrayList, для которого у меня уже есть RecycleViewAdapter.

Проблема, описанная выше,простой пример, который, вероятно, может быть достигнут с помощью простых обходных путей (например, сохранение FullName в db).Но проблема отображения потока реактивных данных из Realm в представление переработчика гораздо шире.

Любые предложения очень ценятся и заранее спасибо

...