反应性地将领域结果映射到ObservableArrayList或在RecyclerView中使用的类似内容

时间:2018-12-18 14:07:26

标签: android android-recyclerview realm rx-java rx-android

我们正在大量基于Realm构建应用程序。我们有以下情况

  1. 想象一下一个包含领域模型User的领域数据库,该模型具有 属性FirstName和LastName
  2. 用户列表可以随时更改,并且列表很大并且 存储在Realm数据库中
  3. 视图层是回收站视图,但是在回收站视图内部 我们并不完全需要FirstName和LastName,而是需要一个 包装类(将其命名为UserViewModel)将包含FullName = FirstName + 姓氏以及一些其他功能
  4. 如果不需要将领域User对象修饰为 其他情况,我们将RealmRecyclerViewAdapterRealmResults<User>,它将始终保持我们的回收者视图 与源数据同步
  5. 但是,由于我们需要处理数据并对其进行扩展 额外的属性,我们需要一种不同的方法

我想到的第一个解决方案是使用Realm和Android的RxJava扩展来完成此任务。伪代码在理论上非常简单

  1. 从领域作为项目流返回的处理结果
  2. 将用户模型映射到UserViewModel
  3. 收听流的变化,并使用以下命令重新填充回收器视图 相关变化

但是,我无法实现它。 Realm的rx扩展包含两种类型的方法-asFlowableasChangeSetObservable。第一个返回Flowable<RealmResults<User>>,第二个返回Observable<ChangeSet<RealmResults<User>>>。似乎我应该使用的是asChangeSetObservable,因为它提供了所有已更改的细节,最终我可以将这些事件传播回RecyclerView

我还考虑重新使用我开发的控件,该控件可以很好地与ObservableArrayList配合使用,并围绕它创建一个通用的RecyclerViewAdapter来处理所有集合更改。在这种情况下,我的问题很可能是获取域结果,执行一些Rx函数并将结果映射回我已经拥有ObservableArrayList的{​​{1}}。

上述问题只是一个简单的示例,很可能可以通过简单的解决方法来实现(例如也将FullName存储在db中)。但是,从Realm映射反应性数据流到回收者视图的问题要广泛得多。

任何建议都非常感谢,并在此先感谢

0 个答案:

没有答案