iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 22
0
Mobile Development

Android Architecture Components 學習心得筆記系列 第 22

Day 22 Paging (Last) 總結 + 最後心得

  • 分享至 

  • xImage
  •  

Paging (Last) 總結 + 最後心得

因為 Paging 蠻複雜的,最後一篇再做一下歸納和整理。

先上官方影片 Android Jetpack: Paging

Working with large set of data
Displaying small amounts of data

影片的開頭算是簡潔的表達了為什麼要用這麼複雜的 Paging
在一大堆資料中,只讀取並展示顯示在畫面上的資料,把資源的消耗降到最低,而且在重複利用、回收、錯誤處理上也都做了更多的優化。

在使用 Paging 之前...

ViewModelLiveData 是必須要搭配使用的,網路上的教學文章十篇裡面有十篇都會跟這些組件一起使用,如果數據來源還有本地端資料庫的話,那 Room 的學習也是不可避免的。

所以如果這些東西一開始都不知道的話,學習成本其實挺高的,非常不建議直接越級打怪學 Paging。

Paging 有幾個重要的部分一定要知道的

  • DataSource : 數據來源,可以是 Network、Database、File、或是任何其他的來源。
    裡面有三種 DataSource:

    PageKeyedDataSource 這一頁的數據包含下一頁所需的訊息
    ItemKeyedDataSource 從第 N 頁載入第 N+1 頁
    PositionalDataSource 能從任何位置載入數據
    可搭配不同情境使用不同的 DataSource

  • DataSourceFactory : 顧名思義就是生成 DataSource 的一個工廠,透過 DataSource.Factory<Key, Value> 取得數據,DataSource.FactoryRoom 有做整合可以直接替換使用,非常方便。

  • PagedList.BoundaryCallback : 加載數據的回調,裡面去定義加載數據的初始化,以及沒有數據時要從哪邊取得新數據的方法。

  • PagedListAdapter : 把 RecyclerView.Adapter 替換的類別,和 RecyclerView.Adapter 不同的是:

  1. 不需要覆寫 getItemCount()
  2. 透過 adapter.submitList(list) 更新數據
  3. 需要實作 DiffUtil.ItemCallback
  4. onBindViewHolder 裡面使用 getItem(position) 取得數據
  • DiffUtil.ItemCallback : 定義 Adapter 裡面的 Item 是否需要替換的邏輯,優化效能。

最後,雖然真的很麻煩,但是實際做出來後 RecyclerView 的滑動是真的很流暢,分頁的加載也不會有卡頓,真的會蠻有成就感的,大家有空一定要試試看

有任何問題或講得不清楚的地方歡迎留言和我討論。

更歡迎留言糾正我任何說錯的地方!

下一篇:Navigation(一) 介紹與基本使用


上一篇
Day 21 Paging (三) (NetWork + Database) Datasource
下一篇
Day 23 Navigation (一) 介紹與基本使用
系列文
Android Architecture Components 學習心得筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言