自訂動態清單 Android Jetpack 的一項工具。

試用 Compose
Jetpack Compose 是 Android 推薦的 UI 工具包。瞭解如何在 Compose 中使用版面配置。

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

修改版面配置

RecyclerView 會使用版面配置管理員來定位個別項目在螢幕上的位置,並判斷何時重複使用使用者不再看到的項目檢視畫面。如要重複使用 (或「回收」) 檢視區塊,版面配置管理員可能會要求轉接程式將檢視畫面內容取代為資料集中的不同元素。用這種方式回收檢視畫面,可避免建立不必要的檢視畫面或執行昂貴的 findViewById() 查詢,藉此提升效能。Android 支援資料庫包含三個標準版面配置管理工具,其中提供許多自訂選項:

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

如果這些版面配置管理工具不符合您的需求,您可以擴充 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() 時請提供這項資訊。建議您採取下列做法:

    • onBindViewHolder() 中,根據是否選取項目,在包含 truefalseView 物件上呼叫 setActivated(),而「不是」setSelected()
    • 更新檢視區塊的樣式來代表已啟用狀態。建議您使用顏色狀態清單資源來設定樣式。
  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 初始化為 SelectionTracker.Builder 的相同 RecyclerView.Adapter。因此,建立 SelectionTracker 執行個體後,請將其插入 RecyclerView.Adapter。否則,您無法透過 onBindViewHolder() 方法檢查項目的選取狀態。

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

其他資源

詳情請參閱下列參考資料。