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

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

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

修改版面配置

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

  • LinearLayoutManager:將項目排成一列清單。使用 透過 LinearLayoutManager 提供的 RecyclerView 提供 例如 ListView 版面配置。
  • GridLayoutManager:將項目排列成二維格線,就像棋盤上的正方形。與 RecyclerView 搭配使用 GridLayoutManager 提供許多功能,例如 GridView 版面配置。
  • StaggeredGridLayoutManager: 以 2D 格線排列項目,每個欄略有偏移 像是美國國旗上的星星

如果這些版面配置管理工具不符合您的需求,您可以 擴充 RecyclerView.LayoutManager 抽象類別。

新增項目動畫

每當項目變更時,RecyclerView 都會使用動畫工具 變更外觀此動畫工具是擴充抽象層的物件 RecyclerView.ItemAnimator 類別根據預設,RecyclerView 會使用 DefaultItemAnimator 提供動畫。如果你想提供自訂動畫,可以 自行定義動畫物件 RecyclerView.ItemAnimator

啟用清單項目選取內容

recyclerview-selection 程式庫可讓使用者透過輕觸或滑鼠輸入的方式選取 RecyclerView 清單中的項目。這樣一來,您就能控管所選項目的視覺呈現方式。您也可以保留控制的選擇政策 例如哪些商品可供選取,以及哪些商品可以接受 。

如要為 RecyclerView 執行個體新增選取功能,請遵循 步驟如下:

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

    有三種鍵類型可用來識別所選項目:

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

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

  4. 更新項目 有 View 個物件位於 RecyclerView 以反映使用者選取或 。

    選取程式庫不會為 已選取的項目。請在實作 onBindViewHolder() 時提供這項資訊。建議您採取下列做法:

    • onBindViewHolder() 中,撥打 setActivated() - 不是 setSelected()—開啟 View 物件,其中包含 truefalse (視該項目採用的類型而定) 已選取
    • 更新檢視區塊的樣式來代表已啟用狀態。建議您使用色彩狀態清單資源來設定樣式。
  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。

其他資源

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