2016-09-05 60 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