透過集合功能整理內容 你可以依據偏好儲存及分類內容。

Recyclerview

在 UI 中顯示大型資料集,同時盡可能降低記憶體用量。

這個表格列出 androidx.recyclerview 群組中的所有構件。

構件 穩定版 候選版 Beta 版 Alpha 版
recyclerview 1.2.1 - 1.3.0-beta02 -
recyclerview-selection 1.1.0 - - 1.2.0-alpha01
本程式庫上次更新日期:2022 年 8 月 10 日

宣告依附元件

如果要為「RecyclerView」新增依附元件,您必須將 Google Maven 存放區新增至專案。詳情請參閱 Google 的 Maven 存放區

在應用程式或模組的 build.gradle 檔案中,新增您需要的構件依附元件:

Groovy

dependencies {
    implementation "androidx.recyclerview:recyclerview:1.2.1"
    // For control over item selection of both touch and mouse driven selection
    implementation "androidx.recyclerview:recyclerview-selection:1.1.0"
}

Kotlin

dependencies {
    implementation("androidx.recyclerview:recyclerview:1.2.1")
    // For control over item selection of both touch and mouse driven selection
    implementation("androidx.recyclerview:recyclerview-selection:1.1.0")
}

如要進一步瞭解依附元件,請參閱「新增建構依附元件」一文。

意見回饋

您的意見可協助我們改善 Jetpack。發現新的問題或有改善這個程式庫的想法時,請告訴我們。建立新的問題之前,請先查看這個程式庫中的現有問題。只要按一下星號按鈕,即可投票給現有的問題。

建立新問題

詳情請參閱 Issue Tracker 說明文件

1.3.0 版本

1.3.0-beta02 版本

2022 年 8 月 10 日

發布 androidx.recyclerview:recyclerview:1.3.0-beta021.3.0-beta02 版本包含以下修訂項目。

API 變更

  • 移除 1.3.0-beta01 版本新增的空值註解,因為這些註解對 Kotlin 使用者代表程式碼非常不相容的變更內容 (I7a258I1557e6I8db76)

1.3.0-beta01 版本

2022 年 6 月 29 日

發布 androidx.recyclerview:recyclerview:1.3.0-beta011.3.0-beta01 版本包含以下修訂項目。

新功能

  • 在本次 Beta 版中,改善了和 Jetpack Compose 一起使用時的效能 (之前含在 1.3.0-alpha02 中的內容)。如果您使用 1.2.0-beta02 以上版本,並曾經按照之前的互通性指南說明使用 MyComposeAdapterDisposeOnViewTreeLifecycleDestroyed ViewCompositionStrategy則應該移除這些項目,因為這些項目不再能夠改善預設狀態。

API 變更

  • 為幾個方法和參數新增是否可為空值的備註,以便為 Java 使用者提供更有幫助的 Lint 警示,並為 Kotlin 使用者提供更良好的互通性。對部分 Kotlin 來說,這次變更會破壞原始碼,並可能導致部分 Java 使用者發生額外的 Lint 警示/錯誤。(I61829b/236487044Ia0b6fI6f119b/236487209Ibe1deb/236487210)

修正錯誤

  • 設定 a11y 節點資訊類別名稱,確保 a11y 服務將格線視為格線處理 (I12812)。

1.3.0-alpha02 版本

2022 年 4 月 6 日

發布 androidx.recyclerview:recyclerview:1.3.0-alpha021.3.0-alpha02 版本包含以下修訂項目。

API 變更

  • 為日後的 SDK 新增實驗性 BuildCompat 方法 (Iafd82b/207528937)
  • 新增 ConcatAdapter.getWrappedAdapterAndPosition 方法,以便在沒有 ViewHolder 的情況下擷取已封裝的轉接程式資訊,例如SpanSizeLookup (I2bd4cb/191543920)

修正錯誤

  • 與新的 AndroidX PoolingContainer 程式庫 (Ib89d2) 整合
  • 調整無障礙動作的捲動距離 (If74ae)

1.3.0-alpha01 版本

2021 年 9 月 15 日

androidx.recyclerview:recyclerview:1.3.0-alpha01 發布。1.3.0-alpha01 版本包含以下修訂項目。

新功能

  • 新增延展過度捲動 RescrView。(Iab877)

RecyclerView-Selection 1.2.0 版本

1.2.0-alpha01 版本

2021 年 5 月 5 日

androidx.recyclerview:recyclerview-selection:1.2.0-alpha01 發布。1.2.0-alpha01 版本包含以下修訂項目。

修正錯誤

  • 修正 KeyProvider 中的金鑰/對應位置在項目未回收時發生的問題。(b/145767095)

1.2.1 版本

1.2.1 版本

2021 年 6 月 2 日

androidx.recyclerview:recyclerview:1.2.1 發布。1.2.1 版本包含以下修訂項目。

修正錯誤

  • 現在 ConcatAdapter 內的 ViewHolderonViewRecycled 回呼中查詢時,會傳回正確的轉接程式位置。(b/187339376)

1.2.0 版本

1.2.0 版本

2021 年 4 月 7 日

androidx.recyclerview:recyclerview:1.2.0 發布。1.2.0 版本包含這些修訂版本。

自 1.1.0 版本以來的重大異動

ConcatAdapter:此新版轉接程式可讓您輕鬆地在相同的 RecyclerView 中串連多個轉接程式。詳情請參閱網誌文章

延遲狀態還原:RecyclerView 轉接程式現在可以延遲載入內容,直到內容載入完成。詳情請參閱說明文件

1.2.0-rc01 版本

2021 年 3 月 24 日

androidx.recyclerview:recyclerview:1.2.0-rc01 發布。1.2.0-rc01 版本包含這些修訂版本

修正錯誤

  • ConcatAdapter.Config.Builder 現在有符合 Config.DEFAULT 的預設值 (b/157169835)

1.2.0-beta02 版本

2021 年 2 月 24 日

androidx.recyclerview:recyclerview:1.2.0-beta02 發布。1.2.0-beta02 版本包含這些修訂版本。

修正錯誤

  • 修正以下問題:頂部邊框間距造成右側過度捲動光暈往上移動至設有邊框間距的區域,而非依循邊框間距往下移動 (I6b61db/118399122)

1.2.0-beta01 版本

2020 年 12 月 2 日

androidx.recyclerview:recyclerview:1.2.0-beta011.2.0-alpha06起沒有變更。1.2.0-beta01 版本包含這些修訂版本。

1.2.0-alpha06 版本

2020 年 10 月 1 日

androidx.recyclerview:recyclerview:1.2.0-alpha06 發布。1.2.0-alpha06 版本包含這些修訂版本。

新功能

API 變更

  • 已淘汰 RecyclerView.setRecyclerListener(RecyclerListener)。(I70ad8b/145767095)

1.2.0-alpha05 版本

2020 年 7 月 22 日

androidx.recyclerview:recyclerview:1.2.0-alpha05 發布。1.2.0-alpha05 版本包含這些修訂版本。

修正錯誤

  • 修正以下問題:如果 RecyclerView 只有一個項目且為焦點,則無法將焦點向前或向後移動。(6f36b3)
  • 修正 StaggeredGridLayoutManager 中的 ArrayIndexOutOfBoundsException (49b601b/122303625b/74877618b/160193663b/37086625)
  • 修正測量錯誤:在特定情況下,RecyclerView 會以錯誤的方式阻止顯示其子項 (89040cb/138734786)。

外部貢獻

  • 感謝 Kolin Krewinkel 代表 Facebook 所做的貢獻

1.2.0-alpha04 版本

2020 年 6 月 24 日

androidx.recyclerview:recyclerview:1.2.0-alpha04 發布。1.2.0-alpha04 版本包含這些修訂版本。

API 變更

  • MergeAdapter 已重新命名為 ConcatAdapter,以避免與不同資料合併行為混淆 (c0540cb/158019211)。

修正錯誤

1.2.0-alpha03 版本

2020 年 4 月 29 日

androidx.recyclerview:recyclerview:1.2.0-alpha03 發布。1.2.0-alpha03 版本包含這些修訂版本。

新功能

  • RecyclerView 現在有 nestedScrollBy 方法,可允許使用搭配建立巢狀結構捲動使用的程式輔助捲動 (Ibaa58)

1.2.0-alpha02 版本

2020 年 4 月 1 日

androidx.recyclerview:recyclerview:1.2.0-alpha02 發布。1.2.0-alpha02 版本包含這些修訂版本。

此版本和較新版本的 RecyclerView 與較舊版本的 ViewPager2 不相容。如果您目前使用的是 androidx.viewpager2:viewpager2:1.0.0 以下版本,請務必更新為 androidx.viewpager2:viewpager2:1.1.0-alpha01

新功能

  • MergeAdapter

    • MergeAdapter:新版 RecyclerView 轉接程式,可將多個轉接程式以線性方式組合。
    MyAdapter adapter1 = ...;
    AnotherAdapter adapter2 = ...;
    MergeAdapter merged = new MergeAdapter(adapter1, adapter2);
    recyclerView.setAdapter(mergedAdapter);
    

    在上方的範例中,MergeAdapter 會顯示 adapter1 中的項目,然後是 adapter2

  • RecyclerView.Adapter 延遲狀態復原

    • RecyclerView.Adapter 類別中加入新的 API,讓轉接程式可以控制還原版面配置狀態的時間。

    • 舉例來說,您可以呼叫:

    myAdapter.setStateRestorationStrategy(StateRestorationStrategy.WHEN_NOT_EMPTY);
    

    使 RecyclerView 等候,直到轉接程式在還原捲動位置前不再為空白。

  • 根據預設,CollectionInfo 和 CollectionItemInfo 不會再填入。

    • 如要讓無障礙服務 (例如 Talkback) 繼續向使用者顯示數量和項目索引,您必須自行填入 CollectionInfo 和 CollectionItemInfo。

    • 系統不會再在架構中將填入這些物件,原因是架構無法判斷使用者感知到的項目數量 (例如分隔符、標頭或代表多個感知項目的 RecyclerView 項目)。

修正錯誤

  • RecyclerView 現在不會在可視區域大小變更時錨定在檢視畫面以外的區域
  • 修正 DiffUtil 中的錯誤:如果在第二個清單中多次複製第一個清單中的原始項目,則計算差異時可能會出錯。(b/123376278)

1.2.0-alpha01 版本

2019 年 12 月 18 日

androidx.recyclerview:recyclerview:1.2.0-alpha01 發布。1.2.0-alpha01 版本包含這些修訂版本

修正錯誤

  • 修正 FastScroller 與 RTL 繪圖和觸控準確度相關的小問題 (b/143789932aosp/1130438)
  • 修正 ItemTouchHelper 動畫執行時,從 RecyclerView 移除動畫會導致 ItemTouchHelper 停止運作的問題 (b/140447176aosp/1167575)

1.1.0 版本

1.1.0 版本

2019 年 11 月 20 日

androidx.recyclerview:recyclerview:1.1.0 發布。1.1.0 版本包含這些修訂版本

自 1.0.0 版以來的重要異動

  • PagerSnapHelperLinearSnapHelper 現在會將 RecyclerView 的邊框間距納入考量,不論 clipToPadding 值為何 (b/139452422b/139012032aosp/1103182aosp/1106715aosp/1130728)
  • RecyclerView.setLayoutTransition(LayoutTransition) 已正式淘汰,因此在使用非空值呼叫時將擲回 IllegalArgumentException。改用 RecyclerView.setItemAnimator(ItemAnimator)。(aosp/839414)
  • aosp/723649:RecyclerView 現在會實作 NestedScrollingChild3,以便收到所有巢狀捲動父項已停止消耗巢狀捲動距離的通知。如果開發人員程式碼目前覆寫 RecyclerView.onNestedScroll(View, int, int, int, int, int),則可能不會再呼叫,並且應改為覆寫 RecyclerView.onNestedScroll(View, int, int, int, int, int, int[])
  • RecyclerView 現有預設樣式屬性:recyclerViewStyle,這可讓您設定主題的預設樣式
  • ViewCompat 無障礙動作 API 不會再中斷 RecyclerView ItemDelegate。
  • 可覆寫 LinearLayoutManager.calculateExtraLayoutSpace(RecyclerView.State, int[]) 以自訂要在關聯 RecyclerView 兩側加入多少版面配置空間。(aosp/931259)
  • 新增 smoothScrollBy 的超載:RecyclerView#smoothScrollBy(@Px int, @Px int, @Nullable Interpolator, int duration),讓您能以毫秒為單位指定動畫所需的播放時間 (aosp/952807)

1.1.0-rc01 版本

2019 年 10 月 23 日

androidx.recyclerview:recyclerview:1.1.0-rc01 發布。1.1.0-rc01 版本包含這些修訂版本

修正錯誤

  • 修正覆寫 RecyclerViewAccessibilityDelegate.ItemDelegate 時的「應用程式無回應」(aosp/1138057aosp/1133434)

1.1.0-beta05 版本

2019 年 10 月 9 日

androidx.recyclerview:recyclerview:1.1.0-beta05 發布。1.1.0-beta05 版本包含這些修訂版本

API 異動

  • 以下是 aosp/1106715aosp/1103182 的後續處理結果:現在 LinearSnapHelper 和 PagerSnapHelper 會傳回位於 RecyclerView 繫結中心範圍的檢視畫面 (減去邊框間距),不受 clipToPadding 的值影響 (aosp/1130728)。

修正錯誤

  • 修正 RecyclerView 為 RecyclerView 子項產生重複無障礙功能節點的問題。(aosp/1130618)
  • 修正在 RecyclerViews 中,虛擬無障礙功能階層無法使用的問題。
  • 修正以下問題:不使用自訂的 ItemDelegates。

1.1.0-beta04 版本

2019 年 9 月 5 日

發布 androidx.recyclerview:recyclerview:1.1.0-beta04。您可以前往這裡查看這個版本包含的修訂版本。

修正錯誤

  • PagerSnapHelperLinearSnapHelper 現在會將 RecyclerView 的邊框間距納入考量,不論 clipToPadding 值為何 (b/139452422b/139012032aosp/1103182aosp/1106715)
  • 修正 RecyclerView 在巢狀預先捲動作業導致 NestedScrollingParent 捲動時允許進行觸控攔截的錯誤 (b/138668210aosp/1105373)。這對 ViewPager2 等程式庫有益。
  • 現在,在傳送巢狀預先捲動前,RecyclerView 總是會前往 SCROLL_STATE_DRAGGING (aosp/1105373)
  • 在手勢超出滑動距離前,系統將不會再執行巢狀預先捲動作業 (b/139530818aosp/1105373)
  • 當 RecyclerView 無法朝指定方向捲動時,分派給巢狀預先捲動作業的 dxdy 引數會歸零 (aosp/1105373)

1.1.0-beta03 版本

2019 年 8 月 15 日

androidx.recyclerview:recyclerview:1.1.0-beta03 發布。您可以前往這裡查看這個版本包含的修訂版本。

API 異動

  • RecyclerView 現在會透過 View.onScrollChanged(int l, int t, int oldl, int oldt) 傳送捲動距離,讓無障礙服務能準確反映捲動變更。(aosp/1007823)

修正錯誤

  • 修正與 RecyclerView 和無障礙功能相關的重大錯誤堆疊溢位錯誤。(aosp/1099577)

1.1.0-beta02 版本

2019 年 8 月 7 日

發布 androidx.recyclerview:recyclerview:1.1.0-beta02。您可以前往這裡查看這個版本包含的修訂版本。

新功能

  • RecyclerView 現有預設樣式屬性:recyclerViewStyle,這可讓您設定主題的預設樣式

修正錯誤

  • 修正在捲動 RecyclerView 導致 NestedScrollingParent 捲動時,RecyclerView 沒有禁用觸控攔截的錯誤。(b/131115697aosp/1055911)

1.1.0-beta01 版本

2019 年 7 月 2 日

發布 androidx.recyclerview:recyclerview:1.1.0-beta01。您可以前往這裡查看這個版本包含的修訂版本。

新功能

  • RecyclerView 現在會於捲動透過無障礙事件啟動時參與巢狀捲動。(aosp/973584)

1.1.0-alpha06 版本

2019 年 6 月 5 日

發布 androidx.recyclerview:recyclerview:1.1.0-alpha06androidx.recyclerview:recyclerview-selection:1.1.0-alpha06。您可以前往這裡查看這個版本包含的修訂版本。

新功能

  • 新增 smoothScrollBy 的超載:RecyclerView#smoothScrollBy(@Px int, @Px int, @Nullable Interpolator, int duration),讓您能以毫秒為單位指定動畫所需的播放時間 (aosp/952807)

API 異動

  • GridLayoutManagerStaggeredGridLayoutManager 不再出於無障礙目的自動標籤完整時距項目為標題 (aosp/969703)
  • 保留 recyclerview-selection 中所選項目的順序 (依建立時間) (aosp/937279)

修正錯誤

  • 修正 RecyclerView 在巢狀捲動情況中以錯誤的速率快速滑過的問題。(aosp/961642)
  • 新增 recyclerview-selection 的穩定性改善項目 (aosp/960213aosp/926296)

1.1.0-alpha05 版本

2019 年 5 月 7 日

發布 androidx.recyclerview:recyclerview:1.1.0-alpha05androidx.recyclerview:recyclerview-selection:1.1.0-alpha05。您可以前往這裡查看這個版本包含的修訂版本。

新功能

  • 您可以覆寫 LinearLayoutManager.calculateExtraLayoutSpace(RecyclerView.State, int[]),藉此自訂要在相關聯的 RecyclerView 兩側加入多少額外版面配置空間 (aosp/931259)

API 異動

  • 新增 API 以擷取 DividerItemDecoration 可繪項目 (aosp/937282)
  • 淘汰 LinearLayout.getExtraLayoutSpace(RecyclerVew.State),改用允許在兩側加入自訂額外版面配置空間的新機制。新方法為 LinearLayout.calculateExtraLayoutSpace(RecyclerView.state, int[]) (aosp/931259)

修正錯誤

1.1.0-alpha04 版本

2019 年 4 月 3 日

androidx.recyclerview:recyclerview:1.1.0-alpha04 發布。您可以前往這裡查看這個版本包含的修訂版本。

修正錯誤

  • RV OnItemTouchListener 先前無法攔截 ACTION_UP,進而導致 OnItemTouchListener 無法阻止其他程式碼回應 ACTION_UP。這個問題現已修正:(aosp/916137)

1.1.0-alpha03 版本

2019 年 3 月 13 日

androidx.recyclerview:recyclerview:1.1.0-alpha03 發布。您可以前往這裡查看這個版本包含的修訂版本完整清單。

新功能

  • GridLayoutManager:選擇加入,較高解析度 GridLayoutManager 捲軸尺寸估算 (aosp/838836):
    • 使用時距資訊預估 GridLayoutManager 的捲軸尺寸。
    • 如要啟用,請將呼叫 GridLayoutManager#setUsingSpansToEstimateScrollbarDimensions(boolean) 以傳遞設為 True。
    • 詳情請參閱 GridLayoutManager#setUsingSpansToEstimateScrollbarDimensions(boolean) 的說明文件。

修正錯誤

  • 無障礙功能:ViewHolder 被再利用並重新繫結後,與 RecyclerView 的 RecyclerViewAccessibilityDelegate 相關聯的 ItemDelegate 無法與 ViewHolder 的 itemView 建立關聯,導致出現無障礙功能無法正常運作的錯誤。這個問題現已修正 (aosp/917740)。

1.1.0-alpha02 版本

2019 年 1 月 30 日

androidx.recyclerview:recyclerview 1.1.0-alpha02 發布。

API 異動

  • 淘汰 RecyclerView.setLayoutFrozen(boolean)RecyclerView.isLayoutFrozen(),並改用 RecyclerView.suppressLayout(boolean)RecyclerView.isLayoutSuppressed() (aosp/839414)
  • RecyclerView.setLayoutTransition(LayoutTransition) 已正式淘汰,因此在使用非空值呼叫時將擲回 IllegalArgumentException。(aosp/839414)

修正錯誤

  • 修正 RV 中 SmoothScroller 無法結束的錯誤 (aosp/843741)
  • 修正在捲動動畫結束時可能不會呼叫 SCROLL_STATE_IDLE 的錯誤。(aosp/812576)

1.1.0-alpha01 版本

2018 年 12 月 3 日

androidx.recyclerview 1.1.0-alpha01androidx.recyclerview-selection 1.1.0-alpha01 發布。

androidx.recyclerview 1.1.0-alpha01

API 異動

  • aosp/723649:RecyclerView 現在會實作 NestedScrollingChild3,以便收到所有巢狀捲動父項已停止消耗巢狀捲動距離的通知。如果開發人員程式碼目前覆寫 RecyclerView.onNestedScroll(View, int, int, int, int, int),則可能不會再呼叫,並且應改為覆寫 RecyclerView.onNestedScroll(View, int, int, int, int, int, int[])

修正錯誤

  • 修正使用 TransitionManager 收合/展開 RecyclerView 中的項目時會發生當機的問題 (b/37129527)
  • 修正 RecyclerView.OnItemTouchListener 的行為與 View 系統的 onInterceptTouchEventonTouchEvent 行為不一致的錯誤 (aosp/721235)
  • 修正幾項與順暢捲動相關的極端案件錯誤 (aosp/729718aosp/747168aosp/812576)
  • 修正 PagerSnapHelper 中的貼齊策略,以便處理非典型的子項檢視畫面 (aosp/795752)

androidx.recyclerview-selection 1.1.0-alpha01

修正錯誤

  • 修正在移除所選項目時變更資料集 ConcurrentModificationException 的問題。

RecyclerView-Selection 1.1.0 版本

RecyclerView-Selection 1.1.0 版本

2021 年 1 月 27 日

發布 androidx.recyclerview:recyclerview-selection:1.1.01.1.0 版本包含以下修訂項目。

自 1.0.0 版起的重大異動

  • 多項穩定性的改善。
  • SelectionTracker.BuilderwithGestureTooltypeswithPointerTooltypes 方法已淘汰。這些方法將在日後推出的版本中移除。

RecyclerView-Selection 1.1.0-rc03 版本

2020 年 10 月 1 日

androidx.recyclerview:recyclerview-selection:1.1.0-rc03 發布。1.1.0-rc03 版本包含以下修訂項目。

修正錯誤

感謝 Stefan Kiesler 進行測試修正並提供意見。

  • 修正以下問題:在主動選取項目的情況下,系統會意外呼叫子項檢視畫面 OnClickListener。
  • 滑鼠處理常式 (頻段選擇) > 妥善處理非預期的捲動動作。(b/167821507)

RecyclerView-Selection 1.1.0-rc02 版本

2020 年 9 月 2 日

androidx.recyclerview:recyclerview-selection:1.1.0-rc02 發布。1.1.0-rc02 版包含這些修訂版本。

重點

  • 解決 1.0 中輸入裝置處理的多次迴歸問題。
  • onRequestDisallowInterceptTouchEvent 更新程式庫,允許與 TouchTouchHelper 搭配使用 (只要滑開即可)。

修正錯誤

  • 修正以下問題:所選程式庫對 GestureDetector 事件的解讀有誤,導致無法在選取過程中偵測到輕觸動作 (b/165030422)
  • 修正以下問題:系統不會更新所選項目,因此無法反映從轉接程式中移除的項目 (b/138932671)
  • 修正以下問題:RecyclerView 項目會在有效選取項目時觸發 Composer 事件的問題 (b/161162268)
  • 現可正確處理 onRequestDisallowInterceptTouchEvent
  • 修正以下問題:在 Q 捲動滑鼠時顯示 ”Cannot call this method in a scroll callback”
  • 更新文件 (特別是在 StableIdKeyProvider 中),以便清楚指出 RecyclerView 執行個體的需求

Recyclerview-Selection 1.1.0-rc01 版本

2020 年 2 月 5 日

androidx.recyclerview:recyclerview-selection:1.1.0-rc01 發布。1.1.0-rc01 版本包含這些修訂版本

修正錯誤

  • 已修正 RecyclerView 在與可捲動的 AppBarLayout 互動時,難以使用所選手勢進行捲動的問題 (aosp/1193934)

RecyclerView-Selection 1.1.0-beta01 版本

2019 年 12 月 4 日

androidx.recyclerview:recyclerview-selection:1.1.0-beta01 發布。1.1.0-beta01 版本包含這些修訂版本

對內部狀態的防禦檢查和管理方式相關的穩定性方面改善。

修正錯誤

API 異動

  • 為類別和方法新增缺少的選取索引鍵類型參數。
  • 淘汰的方法: