ViewPager2

以可滑動格式顯示檢視畫面或片段。
最近更新時間 穩定版 候選版 Beta 版 Alpha 版
2024 年 5 月 14 日 1.1.0 - - -

AndroidX 依附元件

如要使用 ViewPager2,請將下列 AndroidX 依附元件加入專案的 build.gradle 檔案:

Groovy

dependencies {
    implementation "androidx.viewpager2:viewpager2:1.1.0"
}

Kotlin

dependencies {
    implementation("androidx.viewpager2:viewpager2:1.1.0")
}

意見回饋

您的意見可協助我們改善 Jetpack。如果您發現新問題,或是有改進這個程式庫的建議,請告訴我們。回報新問題前,請先查看這個程式庫的現有問題。只要按一下星號按鈕,即可投票給現有的問題。

建立新問題

詳情請參閱 Issue Tracker 說明文件

1.1.0 版本

1.1.0 版本

2024 年 5 月 14 日

發布 androidx.viewpager2:viewpager2:1.1.0。1.1.0 版包含這些修訂項目

自 1.0.0 版以來的重要變更

  • 修正與 RecyclerView 1.3.1-rc01 以上版本搭配使用時發生的當機問題。
  • ViewPager2 現在會正確填入 CollectionInfoCollectionItemInfo,而 RecyclerView 1.2.0-alpha02 以上版本預設不會再填入這些項目。
  • 新增 FragmentTransactionCallback 介面,以監聽 FragmentStateAdapter 中發生的片段生命週期變更。
  • 修正在FragmentManager中新增片段時,初始片段選單顯示設定的FragmentStateAdapter問題。
  • 修正視窗插邊的分派作業:所有頁面現在都會接收相同的插邊。由於舊版 API (< API 30) 上的 WindowInsets 傳送方式可能會導致同層級檢視區塊無法使用插邊,因此如要在 < API 30 裝置上套用插邊,必須透過 WindowInsetsApplier.install(viewPager2) 選擇啟用這項修正。

1.1.0-rc01 版本

2024 年 5 月 1 日

androidx.viewpager2:viewpager2:1.1.0-rc01 已發布,自 1.1.0-beta02 版起沒有重大變更。1.1.0-rc01 版包含這些修訂項目

1.1.0-beta02 版

2023 年 5 月 24 日

發布 androidx.viewpager2:viewpager2:1.1.0-beta02查看 1.1.0-beta02 版的修訂項

API 變更

  • 已將 Fragment 狀態儲存回呼新增至 FragmentTransactionCallback。(I45b90)
  • ViewPager2 現在不再嘗試修正舊版 API (小於 30) 的損毀 WindowInsets 傳送,因為修正本身可能會對 ViewPager2 的同層級造成危害。修正檔仍可使用,但已改為選擇性加入,開發人員可視情況決定是否採用。呼叫 WindowInsetsApplier.install(viewPager2)) 即可啟用修正功能。(Ic9a85)

修正錯誤

  • 修正與新版 RecyclerView 的相容性問題。使用這個版本的 ViewPager2 應更新至至少 RecyclerView 1.3.1-rc01。

1.1.0-beta01 版本

2021 年 8 月 4 日

發布 androidx.viewpager2:viewpager2:1.1.0-beta01查看 1.1.0-beta01 版的修訂項

API 變更

修正錯誤

  • 已修正分派的視窗插網,所有頁面現在都會接收相同的插入點。(I47fef)

1.1.0-alpha01 版本

2020 年 4 月 1 日

發布 androidx.viewpager2:viewpager2:1.1.0-alpha011.1.0-alpha01 版包含以下修訂項目。

這個版本會填入 RecyclerView 1.2.0-alpha02 的變更,而 RecyclerView 會預設為不再提供 CollectionInfoCollectionItemInfo。更新至 RecyclerView 1.2.0-alpha02 時,也會一併更新 ViewPager2,以避免無障礙設計迴歸問題。

新功能

  • 新增 FragmentTransactionCallback 介面,以監聽 FragmentStateAdapter 中發生的片段生命週期變更。(Ibda77)

修正錯誤

  • 修正在FragmentManager中新增片段時,初始片段選單顯示設定的FragmentStateAdapter問題。(I9d2ffb/144442240)

1.0.0 版

1.0.0 版

2019 年 11 月 20 日

androidx.viewpager2:viewpager2:1.0.0」已發布,但 1.0.0-rc01 沒有任何變更。1.0.0 版本包含這些修訂版本

1.0.0 的主要功能

  • 先前的 ViewPager 導入項目改善項目:
    • 支援 RTL (由右至左) 版面配置
    • 支援垂直方向
    • 值得信賴的 Fragment 支援 (包括處理基礎 Fragment 集合的變更)
    • 資料集變更動畫 (包括 DiffUtil 支援)
  • 輕鬆從先前的ViewPager實作遷移 (盡可能使用 API 對等點)。請參閱遷移指南範例應用程式

請參閱指南,瞭解如何使用 ViewPager2 在片段之間滑動。

1.0.0-rc01 版

2019 年 10 月 23 日

androidx.viewpager2:viewpager2:1.0.0-rc01 發布,且自 1.0.0-beta05 起沒有變更。1.0.0-rc01 版包含此連結所列的修訂項目

1.0.0-beta05 版

2019 年 10 月 9 日

發布了 androidx.viewpager2:viewpager2:1.0.0-beta051.0.0-beta05 版包含這些修訂版本

修正錯誤

  • 修正造成畫面外設定的requestFocus問題。此行為現在與原始 ViewPager 一致。(b/140656866)
  • 修正頁面更改後留在畫面外頁面上的focus。當您變更頁面時,焦點現已清除。(b/140656866)
  • 修正在變更網頁時暫停 / 繼續交易Fragment的方式 (從現在起,我們會先暫停舊有的主要項目,再恢復新的項目)。(b/139489059)
  • 修正 canScrollHorizontally(int)canScrollVertically(int) - 現在可以傳回 ViewPager2 是否能按照指定方向捲動。(b/141848404)
  • SwipeRefreshLayout 中的問題已修正,可搭配 ViewPager2 使用。

1.0.0-beta04 版

2019 年 9 月 5 日

發布了 androidx.viewpager2:viewpager2:1.0.0-beta04。您可以前往這裡查看這個版本包含的修訂項目。

修正錯誤

  • 修正 Fragment 返回堆疊的 FragmentStateAdapter 邊緣案例問題。(b/139095195)
  • 修正包含特定屬性設定的 EditText,導致捲動/頁面跳轉/聚焦。(b/138044582b/139432498)
  • 修正 ItemDecoration 執行個體的問題,以及過度捲動指標位置的解決方法。(b/139012032)
  • 修正了其他元件中的許多問題,可與ViewPager2搭配使用,例如:RecyclerViewNestedScrollViewNavigation

1.0.0-beta03 版

2019 年 8 月 7 日

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

修正錯誤

  • 修正暫時Fragment狀態的FragmentStateAdapter問題。b/134246546
  • 修正為currentItemscrollState資料集在順暢捲動期間變更時會發生問題 (已解決的案例)。b/137642608
  • 修正 PageTransformer (包括 MarginPageTransformer) 動畫與資料集變更動畫相衝突的問題。b/134658996
  • 修正大型資料集中的流暢捲動動畫 (限制為 float 整數值)。b/134858960

1.0.0-beta02 版

2019 年 7 月 19 日

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

修正錯誤

  • 移除 1.0.0-beta01 中意外引入的 jacoco 依附元件。(b/137782951)

1.0.0-beta01 版

2019 年 7 月 17 日

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

修正錯誤

  • 修正捲動及更新資料集時的ViewPager2.updateCurrentItem當機問題
  • 修正與「ViewPager2.isLayoutRtl」相關的NullPointerException項當機問題
  • TOUCH_SLOP_PAGING現在是預設的觸控滑桿
  • OnPageChangeCallback 修正空轉接器相關問題 (頁面 0 而非 -1,以與 ViewPager1 進行奇偶校驗)

已知問題

1.0.0-alpha06 版本

2019 年 7 月 2 日

發布 androidx.viewpager2:viewpager2:1.0.0-alpha06。您可以前往這裡查看這個版本包含的修訂項目。

這是我們在凍結 API 並轉為 Beta 版之前,計畫的最後一個 Alpha 版 - 請向我們提供 API 意見回饋。

新功能

  • 更完善的無障礙設計:ACTION_PAGE_RIGHTACTION_PAGE_DOWN

API 變更

  • FragmentStateAdapter:非主要項目Fragment的上限為STARTED,而menuVisibility已設為否。
  • PageTransformerMarginPageTransformerCompositePageTransformerposition已修正說明文件。

修正錯誤

  • 修正資料集變更 / 轉接程式變更後的「currentItem」。
  • MarginPageTransformeroffscreenPageLimit問題已修復。
  • 已修正FakeDrag行為中的無障礙工具動作。

1.0.0-alpha05 版本

2019 年 6 月 5 日

發布 androidx.viewpager2:viewpager2:1.0.0-alpha05。您可以前往這裡查看這個版本包含的修訂項目。

新功能

  • ItemDecorator導入與RecyclerView一致的行為。
  • 導入 MarginPageTransformer,藉此在頁面之間插入空格 (插入網頁之外)。
  • CompositePageTransformer提供結合多個 PageTransformer 的功能。

API 變更

  • FragmentStateAdapter#getItem 方法已重新命名為 FragmentStateAdapter#createFragment - 先前的方法名稱經證實是過去發生的錯誤來源。
  • OFFSCREEN_PAGE_LIMIT_DEFAULT 的值已從 0 變更為 -1。如果使用OFFSCREEN_PAGE_LIMIT_DEFAULT常數,則不需要變更用戶端程式碼。

修正錯誤

  • SCROLL_STATE_SETTLING」被相反方向的拖動打斷時,「getCurrentItem()」行為得到了修正。
  • 「不保留活動」情境中的 FragmentStateAdapter 類別載入器問題已修正。
  • 已改善 setOffscreenPageLimit 說明文件。

1.0.0-alpha04 版本

2019 年 5 月 7 日

發布了 androidx.viewpager2:viewpager2:1.0.0-alpha04。您可以前往這裡查看這個版本包含的修訂項目。

新功能

  • offscreenPageLimit:用於嚴格控管資料檢視區塊階層中的View / Fragment頁數

API 變更

  • orientationisUserScrollable 屬性不再是 SavedState 的一部分
  • saveStaterestoreState 方法最後在 FragmentStateAdapter 完成
  • ViewPager2.OrientationViewPager2.ScrollState註解已設為不公開

修正錯誤

  • SavedState:修正Activity在刪除 / 重新建立資料後還原的問題
  • SavedState:延遲還原,直到轉換器設定完成
  • OnPageChangeCallback:修正小邊緣案例

1.0.0-alpha03 版本

2019 年 4 月 3 日

androidx.viewpager2:viewpager2:1.0.0-alpha03 發布。您可以前往這裡查看這個版本包含的修訂項目。

新功能

  • 能夠以程式捲動 ViewPager2:fakeDragBy(offsetPx)

API 變更

  • FragmentStateAdapter 現在需要 Lifecycle 物件。已新增兩個公用程式建構函式,可從主機 FragmentActivity 或主機 Fragment 取得該建構函式。

修正錯誤

  • 許多 Fragment 支援修正問題:
    • 在最小化或螢幕旋轉期間處理資料集更新;
    • 輪播後移除不相關的片段。
    • 已移除已移除項目的已儲存狀態。
  • PageChangeCallback:修正包含邊界的網頁偏移值計算。

1.0.0-alpha02 版

2019 年 3 月 13 日

發布了 androidx.viewpager2:viewpager2:1.0.0-alpha02。您可以前往這裡查看這個版本包含的修訂項目完整清單。

新功能

  • 停用使用者輸入功能 (setUserInputEnabledisUserInputEnabled)

API 變更

  • ViewPager2 類別最終結果

修正錯誤

  • FragmentStateAdapter穩定性修正

1.0.0-alpha01 版

2019 年 2 月 7 日

發布了 androidx.viewpager2:viewpager2 1.0.0-alpha01。這是 ViewPager2 的第一個版本。

新功能

  • 與其先前的android.support.v4.view.ViewPager (VP1)相比:
    • 支援從右到左 (RTL) 的版面配置
    • 支援垂直方向
    • notifyDataSetChanged 完全正常運作 (已解決 VP1 錯誤)

API 變更

  • FragmentStateAdapter 取代 FragmentStatePagerAdapter
  • RecyclerView.Adapter 取代 PagerAdapter
  • registerOnPageChangeCallback 取代 addPageChangeListener

已知問題

  • clipToPadding
  • 沒有 fakeDrag
  • JavaDoc
  • 與方向平行的巢狀結構捲動
  • 沒有裝置使用時間限制
  • 需要更完善的 TabLayout 整合功能
  • 未指派 pageWidth 設定 (強制 100%/100%)
  • 頁面轉換器:不提供硬體/軟體圖層;無反向繪圖順序
  • 在目前項目之前插入頁面時保持目前項可見
  • 需要鍵盤導覽功能
  • 即將推出FragmentStateAdapter穩定性 / 效能改善