iT邦幫忙

2025 iThome 鐵人賽

DAY 18
0

今天要來介紹稍微有一點點複雜的RecyclerView,建議這邊如果看不懂就多找文章多練習,這個元件還蠻重要的,可以解決很多需要列表之類的東西,會分成2部分寫,第1部分就簡單理論帶過跟前面一樣,實作部分有點多放在明天 :)
那就開始吧:D

什麼是RecyclerView .w.?

RecyclerView是一個進階版的 ListView,它是一個用於在有限的螢幕空間內高效展示大量數據的容器。它的主要優勢在於「回收」和「重用」 View,當一個項目滾動出螢幕時,RecyclerView 不會銷毀它的視圖,而是會將其回收並給新的、即將滾動進螢幕的項目重用。這種機制極大地提升了滑動的流暢度和應用的性能,避免因頻繁創建和銷毀 View 而導致的記憶體抖動和效能問題

RecyclerView的核心組成部分

  • RecyclerView本身:在你的佈局 XML 檔案中宣告的容器視圖
  • LayoutManager:負責排列清單中的項目。它決定了項目是線性排列(垂直或水平)、網格排列還是瀑布流排列
    • LinearLayoutManager:顯示垂直或水平滾動的清單
    • GridLayoutManager:在網格中顯示項目
    • StaggeredGridLayoutManager:在交錯的網格中顯示項目(瀑布流)
  • Item Layout:一個獨立的 XML 檔案,定義了清單中單一項目的樣式
  • Data Model(數據模型):一個簡單的 Java 類別 (POJO),用來定義每個項目所包含的數據結構(例如:一個聯絡人有姓名和電話號碼)
  • Adapter(轉接器):繼承自 RecyclerView.Adapter,這是連接你的數據和 RecyclerView 的橋樑
    • 主要職責:建立新的項目視圖,並將數據綁定到指定的項目視圖上
    • 有三個方法
      • onCreateViewHolder():當 RecyclerView 需要一個新的 ViewHolder 時被呼叫。這方法負責建立並初始化 ViewHolder 及其關聯的 View,但不會填充視圖的內容
      • onBindViewHolder():當 RecyclerView 要在特定位置顯示項目時呼叫。這方法負責將數據綁定到 ViewHolder 的視圖上
      • getItemCount():回傳資料集的總項目數。LayoutManager會根據這個數量來決定需要顯示多少項目
  • ViewHolder:繼承自 RecyclerView.ViewHolder,它像一個快取器,持有單一項目佈局中所有 UI 元件的參考(e.g. TextView,ImageView),這避免了在每次更新項目視圖時重複呼叫findViewById()

RecyclerView 的進階功能與工具

滑動監聽 (RecyclerView.OnScrollListener)

可以為 RecyclerView設置滑動監聽器,以偵測滾動狀態的變化,常用在:

  • 分頁加載 (Pagination / Infinite Scrolling):當用戶滑動到列表底部時,自動加載更多數據
  • 滾動特效:根據滾動的距離或速度,實現如標題欄漸變、按鈕顯示/隱藏等視覺效果

Item Decoration

用於在項目之間添加視覺裝飾,而不需要修改項目本身的佈局 XML,常用包括:

  • 分隔線:在項目之間繪製水平或垂直的分隔線
  • 間距:為每個項目設置均等的邊距 (margin)
  • 分組標頭:為特定區塊的項目添加懸浮標題

項目變更動畫 (Item Animator)

RecyclerView內建了對項目變更的動畫效果支援。當你呼叫 Adapter 的 notifyItemInserted(), notifyItemRemoved(), notifyItemChanged() 等方法時,RecyclerView 會自動觸發預設的淡入、淡出、移動等動畫

DiffUtil 工具

DiffUtil 是一個強大的輔助工具,用於優化列表數據更新的效率。它能夠在背景線程中比較新舊兩個數據列表的差異,並計算出最少的更新操作(新增、刪除、移動、變更)。你可以用它產生的結果來更新Adapter,不僅性能佳,還能自動觸發對應的項目動畫
RecyclerView大概就是這樣,明天會來講如何實作,明天見(-ω- )

https://ithelp.ithome.com.tw/upload/images/20251002/20176154nLoCAZ5LGW.png


上一篇
Day17 CheckBox介紹
系列文
Android 菜鳥30天從0到1的學習紀錄18
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言