ViewPager2

Hiển thị Thành phần hiển thị (View) hoặc Mảnh (Fragment) ở định dạng vuốt được.
Bản cập nhật mới nhất Bản phát hành ổn định Bản phát hành dùng thử Bản phát hành beta Bản phát hành alpha
Ngày 14 tháng 5 năm 2024 1.1.0 - - -

Phần phụ thuộc AndroidX

Để sử dụng ViewPager2, hãy thêm phần phụ thuộc AndroidX sau vào tệp build.gradle của dự án:

Groovy

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

Kotlin

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

Ý kiến phản hồi

Ý kiến phản hồi của bạn có thể giúp chúng tôi cải thiện Jetpack. Hãy cho chúng tôi biết nếu bạn phát hiện lỗi mới hoặc có ý tưởng cải thiện thư viện này. Vui lòng xem các lỗi hiện có trong thư viện này trước khi báo một lỗi mới. Bạn có thể thêm lượt bình chọn cho lỗi hiện có bằng cách nhấp vào nút dấu sao.

Báo lỗi mới

Xem tài liệu về Công cụ theo dõi lỗi để biết thêm thông tin.

Phiên bản 1.1.0

Phiên bản 1.1.0

Ngày 14 tháng 5 năm 2024

Phát hành androidx.viewpager2:viewpager2:1.1.0. Phiên bản 1.1.0 bao gồm các thay đổi sau.

Thay đổi quan trọng kể từ phiên bản 1.0.0

  • Khắc phục sự cố khi sử dụng với RecyclerView 1.3.1-rc01 trở lên.
  • Giờ đây, ViewPager2 sẽ điền chính xác vào CollectionInfoCollectionItemInfo rằng RecyclerView 1.2.0-alpha02 trở lên không còn được điền theo mặc định nữa.
  • Thêm giao diện FragmentTransactionCallback để theo dõi các thay đổi trong vòng đời của mảnh xảy ra trong FragmentStateAdapter.
  • Khắc phục vấn đề FragmentStateAdapter với chế độ hiển thị trình đơn mảnh ban đầu khi thêm một mảnh vào FragmentManager.
  • Khắc phục việc gửi đi các phần lồng ghép cửa sổ: tất cả các trang hiện đều có cùng phần lồng ghép. Do cách WindowInsets được gửi trên các phiên bản API cũ (< API 30) có thể ngăn các thành phần hiển thị đồng cấp sử dụng phần lồng ghép, bạn phải chọn sử dụng bản sửa lỗi này thông qua WindowInsetsApplier.install(viewPager2) nếu muốn áp dụng phần lồng ghép trên các thiết bị < API 30.

Phiên bản 1.1.0-rc01

Ngày 1 tháng 5 năm 2024

androidx.viewpager2:viewpager2:1.1.0-rc01 được phát hành mà không có thay đổi đáng kể nào kể từ phiên bản 1.1.0-beta02. Phiên bản 1.1.0-rc01 bao gồm các thay đổi sau.

Phiên bản 1.1.0-beta02

Ngày 24 tháng 5 năm 2023

Phát hành androidx.viewpager2:viewpager2:1.1.0-beta02. Phiên bản 1.1.0-beta02 bao gồm các thay đổi sau.

Thay đổi về API

  • Thêm lệnh gọi lại lưu trạng thái Mảnh vào FragmentTransactionCallback. (I45b90)
  • ViewPager2 hiện không còn cố gắng khắc phục lỗi gửi WindowInsets bị hỏng của các phiên bản API cũ (< 30) nữa, vì bản sửa lỗi đó có thể gây hại cho các thành phần đồng cấp của ViewPager2. Bản sửa lỗi vẫn có sẵn, nhưng đã trở thành một tuỳ chọn để nhà phát triển có thể quyết định theo từng trường hợp. Bật bản sửa lỗi bằng cách gọi WindowInsetsApplier.install(viewPager2)). (Ic9a85)

Sửa lỗi

  • Khắc phục các vấn đề về khả năng tương thích với các phiên bản RecyclerView mới hơn. Người dùng phiên bản ViewPager2 này nên cập nhật lên ít nhất là RecyclerView 1.3.1-rc01.

Phiên bản 1.1.0-beta01

Ngày 4 tháng 8 năm 2021

Phát hành androidx.viewpager2:viewpager2:1.1.0-beta01. Phiên bản 1.1.0-beta01 bao gồm các thay đổi sau.

Thay đổi về API

Các lỗi sửa

  • Khắc phục việc gửi đi các phần lồng ghép cửa sổ, tất cả các trang hiện đều có cùng phần lồng ghép. (I47fef)

Phiên bản 1.1.0-alpha01

Ngày 1 tháng 4 năm 2020

Phát hành androidx.viewpager2:viewpager2:1.1.0-alpha01. Phiên bản 1.1.0-alpha01 bao gồm các thay đổi sau.

Bản phát hành này đi kèm với một thay đổi trong RecyclerView 1.2.0-alpha02 bằng cách điền CollectionInfoCollectionItemInfoRecyclerView không còn cung cấp theo mặc định nữa. Khi cập nhật lên RecyclerView 1.2.0-alpha02, hệ thống cũng cập nhật ViewPager2 để ngăn chặn hồi quy hỗ trợ tiếp cận.

Tính năng mới

  • Thêm giao diện FragmentTransactionCallback để theo dõi các thay đổi trong vòng đời của mảnh xảy ra trong FragmentStateAdapter. (Ibda77)

Các lỗi sửa

  • Khắc phục vấn đề FragmentStateAdapter với chế độ hiển thị trình đơn mảnh ban đầu khi thêm một mảnh vào FragmentManager. (I9d2ff, b/144442240)

Phiên bản 1.0.0

Phiên bản 1.0.0

Ngày 20 tháng 11 năm 2019

androidx.viewpager2:viewpager2:1.0.0 được phát hành mà không có thay đổi nào từ phiên bản 1.0.0-rc01. Phiên bản 1.0.0 bao gồm các thay đổi sau.

Các tính năng chính của phiên bản 1.0.0

  • Những cải tiến từ hoạt động triển khai ViewPager trước:
    • Hỗ trợ bố cục RTL (từ phải sang trái)
    • Hỗ trợ hướng dọc
    • Dịch vụ hỗ trợ đáng tin cậy Fragment (bao gồm cả việc xử lý các thay đổi đối với bộ sưu tập Fragment cơ bản)
    • Ảnh động thay đổi tập dữ liệu (bao gồm hỗ trợ DiffUtil)
  • Dễ dàng di chuyển từ việc triển khai ViewPager trước đó (API tương đương nếu có thể). Xem hướng dẫn di chuyểnứng dụng mẫu.

Xem hướng dẫn về cách sử dụng ViewPager2 để trượt giữa các Mảnh.

Phiên bản 1.0.0-rc01

Ngày 23 tháng 10 năm 2019

androidx.viewpager2:viewpager2:1.0.0-rc01 được phát hành mà không có thay đổi nào kể từ 1.0.0-beta05. Phiên bản 1.0.0-rc01 bao gồm các thay đổi sau.

Phiên bản 1.0.0-beta05

Ngày 9 tháng 10 năm 2019

Phát hành androidx.viewpager2:viewpager2:1.0.0-beta05. Phiên bản 1.0.0-beta05 bao gồm các thay đổi sau.

Sửa lỗi

  • Sửa lỗi cho requestFocus trên trang ngoài màn hình gây ra thay đổi đối với trang. Hành vi này hiện đã nhất quán với ViewPager ban đầu. (b/140656866)
  • Sửa lỗi cho focus còn lại trên trang ngoài màn hình sau một thay đổi trang. Tiêu điểm hiện bị xoá khi thay đổi trang. (b/140656866)
  • Sửa lỗi yêu cầu các giao dịch tạm dừng/ tiếp tục Fragment khi thay đổi trang (hiện chúng tôi luôn tạm dừng mục cũ trước khi tiếp tục mục mới). (b/139489059)
  • Sửa lỗi cho canScrollHorizontally(int)canScrollVertically(int) – hiện chúng sẽ trả về nếu ViewPager2 có thể cuộn theo hướng cụ thể. (b/141848404)
  • Một sự cố trong SwipeRefreshLayout đã được khắc phục để hoạt động tốt hơn với ViewPager2.

Phiên bản 1.0.0-beta04

Ngày 5 tháng 9 năm 2019

Phát hành androidx.viewpager2:viewpager2:1.0.0-beta04. Bạn có thể xem các thay đổi trong phiên bản này tại đây.

Sửa lỗi

  • Khắc phục vấn đề edge-case (các tình huống xảy ra trong điều kiện hoạt động khắc nghiệt) FragmentStateAdapter có ngăn xếp quay lại Fragment. (b/139095195)
  • Sửa lỗi cho EditText với một số cấu hình thuộc tính nhất định gây ra hiện tượng cuộn/trang bật tính năng nhập/tập trung. (b/138044582, b/139432498)
  • Khắc phục vấn đề với các phiên bản ItemDecoration và giải pháp cho việc xác định vị trí chỉ báo cuộn quá mức. (b/139012032)
  • Một số vấn đề đã được khắc phục trong các thành phần khác để hoạt động hiệu quả hơn với ViewPager2: RecyclerView, NestedScrollViewNavigation.

Phiên bản 1.0.0-beta03

Ngày 7 tháng 8 năm 2019

Phát hành androidx.viewpager2:viewpager2:1.0.0-beta03. Bạn có thể xem các thay đổi trong phiên bản này tại đây.

Sửa lỗi

  • Khắc phục vấn đề về FragmentStateAdapter với trạng thái Fragment tạm thời. b/134246546
  • Khắc phục vấn đề về currentItemscrollState khi một tệp dữ liệu thay đổi trong quá trình cuộn mượt mà (đã giải quyết các trường hợp vi phạm). b/137642608
  • Khắc phục các hoạt ảnh PageTransformer (bao gồm cả MarginPageTransformer) xung đột với các hoạt ảnh thay đổi tập dữ liệu. b/134658996
  • Khắc phục hoạt ảnh cuộn mượt trong tập dữ liệu lớn (giới hạn giá trị số nguyên float). b/134858960

Phiên bản 1.0.0-beta02

Ngày 19 tháng 7 năm 2019

Phát hành androidx.viewpager2:viewpager2:1.0.0-beta02. Bạn có thể xem các thay đổi trong phiên bản này tại đây.

Sửa lỗi

  • Xoá phần phụ thuộc jacoco ngoài ý muốn đã được giới thiệu trong 1.0.0-beta01. (b/137782951)

Phiên bản 1.0.0-beta01

Ngày 17 tháng 7 năm 2019

Phát hành androidx.viewpager2:viewpager2:1.0.0-beta01. Bạn có thể xem các thay đổi trong phiên bản này tại đây.

Sửa lỗi

  • Khắc phục sự cố ViewPager2.updateCurrentItem trong khi cuộn và cập nhật tập dữ liệu
  • Khắc phục sự cố NullPointerException liên quan đến ViewPager2.isLayoutRtl
  • TOUCH_SLOP_PAGING hiện là touch slop (điểm chạm) mặc định (touch slop là khoảng cách tính bằng pixel mà người dùng có thể chạm vào trước khi cử chỉ đó được hiểu là cuộn).
  • Khắc phục các sự kiện OnPageChangeCallback cho bộ chuyển đổi rỗng (trang 0 thay vì -1 cho các trình chuyển đổi ngang hàng với ViewPager1)

Vấn đề đã biết

Phiên bản 1.0.0-alpha06

Ngày 2 tháng 7 năm 2019

Phát hành androidx.viewpager2:viewpager2:1.0.0-alpha06. Bạn có thể xem các thay đổi trong phiên bản này tại đây.

Đây là bản alpha được lên kế hoạch gần đây nhất của chúng tôi trước khi đóng băng API và chuyển sang bản beta – vui lòng phản hồi API cho chúng tôi.

Tính năng mới

  • Những nền tảng giúp cải thiện tính năng Hỗ trợ tiếp cận: ACTION_PAGE_RIGHT, ACTION_PAGE_DOWN, v.v.

Thay đổi về API

  • FragmentStateAdapter: các Fragment không phải là mục chính sẽ được giới hạn ở STARTEDmenuVisibility sẽ được đặt là false.
  • PageTransformer, MarginPageTransformer, CompositePageTransformer: tài liệu về positionđã sửa.

Sửa lỗi

  • Khắc phục currentItem sau một thay đổi về tệp dữ liệu hoặc một bộ chuyển đổi.
  • Khắc phục vấn đề MarginPageTransformer với offscreenPageLimit.
  • Khắc phục các hành động hỗ trợ tiếp cận khi ở hành vi FakeDrag.

Phiên bản 1.0.0-alpha05

Ngày 5 tháng 6 năm 2019

Phát hành androidx.viewpager2:viewpager2:1.0.0-alpha05. Bạn có thể xem các thay đổi trong phiên bản này tại đây.

Tính năng mới

  • ItemDecorator được giới thiệu với hành vi phù hợp với RecyclerView.
  • MarginPageTransformer được giới thiệu để tạo không gian giữa các trang (bên ngoài phần lồng ghép trang).
  • CompositePageTransformer được giới thiệu để có thể kết hợp nhiều PageTransformer.

Thay đổi về API

  • Phương thức FragmentStateAdapter#getItem được đổi tên thành FragmentStateAdapter#createFragment – tên phương thức trước đây đã được chứng minh là nguồn gây ra lỗi.
  • Giá trị của OFFSCREEN_PAGE_LIMIT_DEFAULT đã thay đổi từ 0 thành -1. Bạn không cần thay đổi mã thành phần thụ hưởng nếu sử dụng hằng số OFFSCREEN_PAGE_LIMIT_DEFAULT.

Sửa lỗi

  • Đã sửa hành vi getCurrentItem() khi SCROLL_STATE_SETTLING bị gián đoạn bởi việc kéo theo hướng ngược lại.
  • Các vấn đề về trình tải lớp FragmentStateAdapter được giải quyết trong ngữ cảnh "Không duy trì các hoạt động".
  • Đã cải thiện tài liệu setOffscreenPageLimit.

Phiên bản 1.0.0-alpha04

Ngày 7 tháng 5 năm 2019

Phát hành androidx.viewpager2:viewpager2:1.0.0-alpha04. Bạn có thể xem các thay đổi trong phiên bản này tại đây.

Tính năng mới

  • offscreenPageLimit: cho phép kiểm soát chặt chẽ số lượng trang View/Fragment được lưu giữ trong hệ phân cấp Thành phần hiển thị

Thay đổi về API

  • Các thuộc tính orientationisUserScrollable không còn nằm trong SavedState
  • Các phương thức saveStaterestoreState đã hoàn tất trong FragmentStateAdapter
  • Các chú thích ViewPager2.OrientationViewPager2.ScrollState không còn công khai

Sửa lỗi

  • SavedState: Khắc phục sự cố khôi phục khi Activity bị hủy/tạo lại
  • SavedState: trì hoãn khôi phục cho đến khi thiết lập bộ chuyển đổi
  • OnPageChangeCallback: Khắc phục các trường hợp edge nhỏ (các tình huống xảy ra trong điều kiện hoạt động khắc nghiệt)

Phiên bản 1.0.0-alpha03

Ngày 3 tháng 4 năm 2019

Phát hành androidx.viewpager2:viewpager2:1.0.0-alpha03. Bạn có thể xem các thay đổi trong phiên bản này tại đây.

Tính năng mới

  • Khả năng cuộn ViewPager2: fakeDragBy(offsetPx).

Thay đổi về API

  • FragmentStateAdapter hiện yêu cầu đối tượng Lifecycle. Hai hàm khởi tạo hiệu dụng đã được thêm vào để lấy đối tượng đó từ máy chủ FragmentActivity hoặc máy chủ Fragment.

Sửa lỗi

  • Nhiều hỗ trợ Fragment được sửa:
    • xử lý các bản cập nhật tập dữ liệu khi thu nhỏ hoặc trong khi xoay màn hình;
    • xoá các mảnh không liên quan sau khi xoay;
    • xoá trạng thái đã lưu của các mục đã xoá.
  • PageChangeCallback: tính toán mức chênh lệch trên trang cố định cho các trang có lề.

Phiên bản 1.0.0-alpha02

Ngày 13 tháng 3 năm 2019

Phát hành androidx.viewpager2:viewpager2:1.0.0-alpha02. Bạn có thể xem danh sách đầy đủ các thay đổi trong phiên bản này tại đây.

Tính năng mới

  • Khả năng vô hiệu hoá hoạt động đầu vào của người dùng(setUserInputEnabled, isUserInputEnabled)

Thay đổi về API

  • Lớp cuối ViewPager2

Sửa lỗi

  • Sửa độ ổn định FragmentStateAdapter

Phiên bản 1.0.0-alpha01

Ngày 7 tháng 2 năm 2019

Phát hành androidx.viewpager2:viewpager2 1.0.0-alpha01. Đây là bản phát hành đầu tiên của ViewPager2.

Tính năng mới

  • So sánh với các phiên bản trướcandroid.support.v4.view.ViewPager (VP1):
    • Hỗ trợ bố cục từ phải sang trái (RTL)
    • Hỗ trợ hướng dọc
    • notifyDataSetChanged đầy đủ chức năng (các lỗi VP1 đã xử lý)

Thay đổi về API

  • FragmentStateAdapter thay thế FragmentStatePagerAdapter
  • RecyclerView.Adapter thay thế PagerAdapter
  • registerOnPageChangeCallback thay thế addPageChangeListener

Vấn đề đã biết

  • clipToPadding
  • không có fakeDrag
  • JavaDoc
  • cuộn lồng ghép song song với hướng
  • không kiểm soát giới hạn ngoài màn hình
  • cần tích hợp TabLayout tốt hơn
  • không có trình thiết lập pageWidth (bắt buộc 100%/100%)
  • trình chuyển đổi trang: không có lựa chọn lớp phần cứng/phần mềm; không có thứ tự bản vẽ ngược
  • hiển thị mục hiện tại khi chèn một trang trước mục hiện tại
  • điều hướng bằng bàn phím cần hoạt động
  • cải thiện hiệu suất/độ ổn định của FragmentStateAdapter sắp ra mắt