我寫我自己的CursorAdapter爲RecyclerView像以下鏈接:https://gist.github.com/skyfishjy/443b7448f59be978bc59如何將數據從數據庫顯示到具有高性能的RecyclerView?
然後我發現每當我改變數據庫的東西,要顯示它在RecyclerView,我需要建立由db.query一個新的光標()和使用CursorAdpater的changeCursor()。由於query()將掃描數據庫中的所有行,因此即使只向數據庫中插入一行,數據量也很大時,RecyclerView將會緩慢刷新。我們都知道,RecyclerView爲開發者提供了notifyItemInserted/Removed(position),這樣RecyclerView可以部分刷新,這對內存/時間是有用的和有益的。但是,當我使用CursorAdapter時,我不知道何時以及如何使用這些方法,因爲更改遊標並不直接向使用RecyclerView的數據集綁定添加內容,而是實際刷新所有項目。
那麼有沒有更好的方法來顯示數據庫中的數據在RecyclerView中,並使用RecyclerView的改進方法來顯示各種數據庫?
我考慮過和你一樣的想法,但它們不是最好的方法。首先,CursorLoader專爲刷新可能隨時改變的數據而設計。在我的情況下,我知道何時刷新數據和UI,所以如果我使用CursorLoader,則會創建另一個線程,從而浪費資源。其次,將遊標中的數據複製到arrayList似乎很容易,但它有相同的問題:內存浪費,因爲在這裏實際上不需要arrayList ----如果有遊標提供數據,爲什麼我應該使用arrayList?最後,步驟C可能會導致錯誤。 – ywwynm
我會從最後開始,如果正確完成,步驟c不會導致錯誤。 我已經複製了數組,因爲我想'刷卡做刪除'功能,我真的不喜歡在主線程上對數據庫做任何改變。它可能是一種'浪費'的內存(可能),但它對UI的使用很有效。再次,我認爲另一個數組在這裏和那裏有一個便宜,然後刪除用戶界面上的數據庫中的一行。 – EE66
我即將接受你的建議。但是我想到了一些新的東西:加載遊標,將數據複製到Activity的onCreate()中的arrayList並將其與RecyclerView.Adapter綁定。然後,當我想更改UI線程上的數據時,我只更新arrayList。最後,在Activity的onStop()中,我會將arrayList的所有數據放入數據庫(插入新數據,更新已更改數據並保留現有數據)。好點嗎? – ywwynm