因為 Paging 蠻複雜的,最後一篇再做一下歸納和整理。
先上官方影片 Android Jetpack: Paging
Working with large set of data
Displaying small amounts of data
影片的開頭算是簡潔的表達了為什麼要用這麼複雜的 Paging
在一大堆資料中,只讀取並展示顯示在畫面上的資料,把資源的消耗降到最低,而且在重複利用、回收、錯誤處理上也都做了更多的優化。
在使用 Paging 之前...
ViewModel 和 LiveData 是必須要搭配使用的,網路上的教學文章十篇裡面有十篇都會跟這些組件一起使用,如果數據來源還有本地端資料庫的話,那 Room 的學習也是不可避免的。
所以如果這些東西一開始都不知道的話,學習成本其實挺高的,非常不建議直接越級打怪學 Paging。
Paging 有幾個重要的部分一定要知道的
DataSource : 數據來源,可以是 Network、Database、File、或是任何其他的來源。
裡面有三種 DataSource
:
PageKeyedDataSource
這一頁的數據包含下一頁所需的訊息ItemKeyedDataSource
從第 N 頁載入第 N+1 頁PositionalDataSource
能從任何位置載入數據
可搭配不同情境使用不同的 DataSource
DataSourceFactory : 顧名思義就是生成 DataSource
的一個工廠,透過 DataSource.Factory<Key, Value>
取得數據,DataSource.Factory
跟 Room
有做整合可以直接替換使用,非常方便。
PagedList.BoundaryCallback : 加載數據的回調,裡面去定義加載數據的初始化,以及沒有數據時要從哪邊取得新數據的方法。
PagedListAdapter : 把 RecyclerView.Adapter
替換的類別,和 RecyclerView.Adapter
不同的是:
getItemCount()
adapter.submitList(list)
更新數據DiffUtil.ItemCallback
onBindViewHolder
裡面使用 getItem(position)
取得數據最後,雖然真的很麻煩,但是實際做出來後 RecyclerView 的滑動是真的很流暢,分頁的加載也不會有卡頓,真的會蠻有成就感的,大家有空一定要試試看
有任何問題或講得不清楚的地方歡迎留言和我討論。
更歡迎留言糾正我任何說錯的地方!