2016-09-05 23 views
0

我开始接近Realm这个美妙的世界。我对结果很满意,现在我有一个问题需要提交。基于时间的查询更新了RealmResults

在我的Android应用程序中,我有一个显示从Realm检索到的数据的片段。查询条件是该数据引用的时间在今天的开始和结束之间。

RealmResults<Appointment> results = realm 
    .where(MyObject.class) 
    .between("begin", rangeBegin, rangeEnd) 
    .between("end", rangeBegin, rangeEnd) 
    .findAllSorted("begin", Sort.ASCENDING); 

该查询在调用onStart()方法帮助我利用实时更新的功能,这的确效果很好执行。 我也为了优化UI更新而添加了更改的侦听器。

现在的问题是:如果时间条件改变,这个实时更新如何表现? (想象一下,我保持应用程序打开超过一天而不触摸它,或者只是让应用程序在午夜左右打开分钟)

从我所看到的似乎在第一次完成相同的查询onStart ()被执行。

有没有一种方法可以实时更新查询,还是应该在onStart()之外的其他地方重新运行该查询?

预先感谢您

回答

2

现在的问题是:这如何实时更新的行为如果时间条件发生变化? (想象一下,我一直打开超过一天的应用,而无需触碰,或干脆我把应用程序打开午夜分钟)

查询是相当恒定的,你已经设置之后,所以你需要使用rangeStartrangeEnd的不同参数执行新查询,并替换您的其他结果。

该查询在onStart()方法中执行,帮助我利用实时更新功能,该功能确实工作得很好。为了优化UI更新,我还添加了侦听器以进行更改。

个人而言,我会建议把查询的onCreateView(),而是和王国生命周期管理,以onCreateView()onDestroyView()

另外,如果您使用RealmRecyclerViewAdapter(适配器1.3.0适用于领域1.2.0),则可以避免手动分配RealmChangeListeners以显示列表。

如果您使用RealmRecyclerViewAdapter,那么只需拨打adapter.updateData(newResults);,它会根据需要更新视图。

+0

谢谢。我稍后将在另一个片段中使用RealmRecyclerViewAdapter,在这里我不需要它。为什么你建议onCreateView()?我已经按照这里的教程https://realm.io/docs/java/latest/#controlling-the-lifecycle-of-realm-instances – LucioB

+0

我[相信它比onStart/onStop](https:// github .com/realm/realm -java/issues/3362#issuecomment-243145655),这就是所有:) – EpicPandaForce

+0

如果我确实执行了一个新的查询,那么侦听器将被触发,以查看新查询结果的变化,对吧? – LucioB