自訂動態清單   Android Jetpack 的一部分。

試試 Compose 的方式
Jetpack Compose 是 Android 推薦的 UI 工具包。瞭解如何在 Compose 中處理版面配置。

您可以依據特定需求自訂 RecyclerView 物件。使用 RecyclerView 建立動態清單一文中所述的標準類別,提供大多數開發人員所需的所有功能。在許多情況下,您只需為每個檢視容器設計檢視畫面,並編寫程式碼,以便使用適當資料更新這些檢視畫面。不過,如果您的應用程式有特定要求,則可以透過多種方式修改標準行為。本文件將說明一些可能的自訂項目。

修改版面配置

RecyclerView 會使用版面配置管理員確定個別項目在螢幕上的擺放位置,並決定何時重複使用對使用者不再顯示的項目檢視區塊。如要重複使用 (或回收利用) 檢視區塊,版面配置管理員可能會要求調整器將檢視區塊的內容替換成資料集中的另一元素。以這種方式回收利用檢視區塊,能夠避免建立不必要的檢視區塊或執行昂貴的 findViewById() 查詢,從而能夠提升效能。Android 支援資料庫包含三個標準版面配置管理員,每個管理員都提供多個自訂選項:

  • LinearLayoutManager:將項目排成一列清單。將 RecyclerViewLinearLayoutManager 搭配使用,可提供 ListView 版面配置等功能。
  • GridLayoutManager:將項目排列成二維格線,就像棋盤上的正方形。將 RecyclerViewGridLayoutManager 搭配使用,可提供 GridView 版面配置等功能。
  • StaggeredGridLayoutManager:將項目排列成二維格線,每一欄都與前一欄略有偏移,就像美國國旗上的星星。

如果這些版面配置管理員都不符合您的需求,則可以擴充 RecyclerView.LayoutManager 抽象類別,建立自己的版面配置管理員。

新增項目動畫

當項目變更時,RecyclerView 會使用動畫工具來變更其外觀。這個動畫工具是可擴充抽象 RecyclerView.ItemAnimator 類別的物件。根據預設,RecyclerView 會使用 DefaultItemAnimator 提供動畫。如果您想提供自訂動畫,則可以擴充 RecyclerView.ItemAnimator 來定義自己的動畫工具物件。

啟用清單項目選取內容

recyclerview-selection 程式庫可讓使用者透過輕觸或滑鼠輸入的方式選取 RecyclerView 清單中的項目。這樣一來,您就能控管所選項目的視覺呈現方式。也可以控管用來控制選取行為的政策,例如能夠選取的項目以及可選取的項目數。

如要向 RecyclerView 例項新增選取支援,請按照以下步驟操作:

  1. 確定要使用的選取索引鍵類型,然後建構 ItemKeyProvider

    您可以使用三種鍵類型來識別所選項目:

    如要進一步瞭解選取索引鍵類型,請參閱 SelectionTracker.Builder

  2. 實作 ItemDetailsLookup
  3. ItemDetailsLookup 可讓選取程式庫存取提供 MotionEventRecyclerView 項目相關資訊。這實際上是 ItemDetails 例項的工廠,這些例項由 RecyclerView.ViewHolder 例項備份 (或從中擷取而來)。

  4. 更新 RecyclerView 中的項目 View 物件,以反映使用者是否選取或取消選取這些項目。

    選取程式庫不會為選定項目提供預設視覺呈現風格。請在實作 onBindViewHolder() 時提供這項資訊。我們建議採用下列做法:

  5. 使用 ActionMode 為使用者提供可對選取內容執行動作的工具。
  6. 註冊 SelectionTracker.SelectionObserver,以便在選取內容變更時收到通知。首次建立選取內容時,啟動 ActionMode 以將其呈現給使用者,並提供特定於選取內容的動作。舉例來說,您可以在 ActionMode 列中新增刪除按鈕,並將列上的返回箭頭連線到清除選取內容。如果選取內容變為空白 (使用者最後一次清除選取內容),則終止動作模式。

  7. 執行已解讀的次要動作。
  8. 在事件處理管道結束時,程式庫可能會判定使用者正在嘗試透過輕觸項目來啟動項目,還是嘗試拖曳一個項目或一組所選項目。註冊適當的事件監聽器來回應這些解釋。詳情請參閱 SelectionTracker.Builder

  9. 使用 SelectionTracker.Builder 組合所有內容。
  10. 以下範例說明如何將這些部分組合在一起:

    Kotlin

        var tracker = SelectionTracker.Builder(
            "my-selection-id",
            recyclerView,
            StableIdKeyProvider(recyclerView),
            MyDetailsLookup(recyclerView),
            StorageStrategy.createLongStorage())
                .withOnItemActivatedListener(myItemActivatedListener)
                .build()
        

    Java

        SelectionTracker tracker = new SelectionTracker.Builder<>(
                "my-selection-id",
                recyclerView,
                new StableIdKeyProvider(recyclerView),
                new MyDetailsLookup(recyclerView),
                StorageStrategy.createLongStorage())
                .withOnItemActivatedListener(myItemActivatedListener)
                .build();
        

    如要建構 SelectionTracker 例項,您的應用程式提供的 RecyclerView.Adapter 必須與用於將 RecyclerView 初始化為 SelectionTracker.Builder 的工具相同。因此,在建立 SelectionTracker 例項後,請將該例項插入 RecyclerView.Adapter。否則,您將無法使用 onBindViewHolder() 方法查看項目的所選狀態。

  11. 將選取內容加入活動生命週期事件中。
  12. 如要在活動生命週期事件中保留選取狀態,應用程式必須分別從活動的 onSaveInstanceState()onRestoreInstanceState() 方法,呼叫選取追蹤工具的 onSaveInstanceState()onRestoreInstanceState() 方法。您的應用程式還必須向 SelectionTracker.Builder 建構函式提供專屬的選取 ID。由於活動或片段可能擁有多個不同的可選取清單,所有這些清單都需要保持儲存狀態,因此需要提供這一 ID。

其他資源

如需更多資訊,請參閱下列參考資料。