今天要來介紹稍微有一點點複雜的RecyclerView,建議這邊如果看不懂就多找文章多練習,這個元件還蠻重要的,可以解決很多需要列表之類的東西,會分成2部分寫,第1部分就簡單理論帶過跟前面一樣,實作部分有點多放在明天 :)
那就開始吧:D
RecyclerView是一個進階版的 ListView,它是一個用於在有限的螢幕空間內高效展示大量數據的容器。它的主要優勢在於「回收」和「重用」 View,當一個項目滾動出螢幕時,RecyclerView 不會銷毀它的視圖,而是會將其回收並給新的、即將滾動進螢幕的項目重用。這種機制極大地提升了滑動的流暢度和應用的性能,避免因頻繁創建和銷毀 View 而導致的記憶體抖動和效能問題
LinearLayoutManager
:顯示垂直或水平滾動的清單GridLayoutManager
:在網格中顯示項目StaggeredGridLayoutManager
:在交錯的網格中顯示項目(瀑布流)RecyclerView.Adapter
,這是連接你的數據和 RecyclerView
的橋樑
onCreateViewHolder()
:當 RecyclerView 需要一個新的 ViewHolder 時被呼叫。這方法負責建立並初始化 ViewHolder 及其關聯的 View,但不會填充視圖的內容onBindViewHolder()
:當 RecyclerView 要在特定位置顯示項目時呼叫。這方法負責將數據綁定到 ViewHolder 的視圖上
getItemCount()
:回傳資料集的總項目數。LayoutManager會根據這個數量來決定需要顯示多少項目RecyclerView.ViewHolder
,它像一個快取器,持有單一項目佈局中所有 UI 元件的參考(e.g. TextView,ImageView),這避免了在每次更新項目視圖時重複呼叫findViewById()
可以為 RecyclerView設置滑動監聽器,以偵測滾動狀態的變化,常用在:
用於在項目之間添加視覺裝飾,而不需要修改項目本身的佈局 XML,常用包括:
RecyclerView內建了對項目變更的動畫效果支援。當你呼叫 Adapter 的 notifyItemInserted()
, notifyItemRemoved()
, notifyItemChanged()
等方法時,RecyclerView 會自動觸發預設的淡入、淡出、移動等動畫
DiffUtil 是一個強大的輔助工具,用於優化列表數據更新的效率。它能夠在背景線程中比較新舊兩個數據列表的差異,並計算出最少的更新操作(新增、刪除、移動、變更)。你可以用它產生的結果來更新Adapter,不僅性能佳,還能自動觸發對應的項目動畫
RecyclerView大概就是這樣,明天會來講如何實作,明天見(-ω- )