ViewPager2
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.
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 cá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ácCollectionInfo
vàCollectionItemInfo
mà RecyclerView1.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 trongFragmentStateAdapter
. - 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àoFragmentManager
. - 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 các phần lồng ghép. Do cách
WindowInsets
được gửi đi trên các phiên bản API cũ (< API 30) có thể ngăn phần lồng ghép không có sẵn cho các khung hiển thị đồng cấp, bạn phải chọn sử dụng bản sửa lỗi này thông quaWindowInsetsApplier.install(viewPager2)
nếu muốn áp dụng phần lồng ghép trên thiết bị < API 30.
Phiên bản 1.1.0-rc01
Ngày 1 tháng 5 năm 2024
Phát hành androidx.viewpager2:viewpager2:1.1.0-rc01
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.
Các thay đổi về API
- Thêm lệnh gọi lại lưu trạng thái của Mảnh vào
FragmentTransactionCallback
. (I45b90) ViewPager2
hiện không còn cố gắng khắc phục lỗi gửiWindowInsets
của các phiên bản API cũ (< 30) bị hỏng, vì bản thân việc sửa lỗi này có thể gây hại cho các phiên bản đồng cấp củaViewPager2
. Chúng tôi vẫn xem được bản sửa lỗi nhưng nhà phát triển có thể chọn sử dụng bản sửa lỗi này để quyết định theo từng trường hợp. Bạn có thể kích hoạt bản sửa lỗi bằng cách gọiWindowInsetsApplier.install(viewPager2))
. (Ic9a85)
Sửa lỗi
- Khắc phục vấn đề về khả năng tương thích với các phiên bản mới hơn của
RecyclerView
. Người dùng phiên bảnViewPager2
này nên cập nhật lên ít nhấtRecyclerView
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.
Các thay đổi về API
Nâng cấp androix để sử dụng Kotlin 1.4 (Id6471, b/165307851, b/165300826)
Di chuyển đến Java 8 cho tất cả thư viện androidx (2923f39)
Sửa lỗi
- 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 CollectionInfo
và CollectionItemInfo
mà RecyclerView
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 trongFragmentStateAdapter
. (Ibda77)
Sửa lỗi
- 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àoFragmentManager
. (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ậpFragment
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 và ứ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)
và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ạiFragment
. (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, NestedScrollView và Navigation.
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áiFragment
tạm thời. b/134246546 - Khắc phục vấn đề về
currentItem
vàscrollState
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 đếnViewPager2.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 (trang0
thay vì-1
cho các trình chuyển đổi ngang hàng vớiViewPager1
)
Vấn đề đã biết
- Chúng tôi vẫn đang xử lý các vấn đề còn lại trước khi chuyển sang phiên bản ổn định.
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ácFragment
không phải là mục chính sẽ được giới hạn ởSTARTED
vàmenuVisibility
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ớioffscreenPageLimit
. - 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ớiRecyclerView
.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ềuPageTransformer
.
Thay đổi về API
- Phương thức
FragmentStateAdapter#getItem
được đổi tên thànhFragmentStateAdapter#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()
khiSCROLL_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 trangView
/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
orientation
vàisUserScrollable
không còn nằm trongSavedState
- Các phương thức
saveState
vàrestoreState
đã hoàn tất trongFragmentStateAdapter
- Các chú thích
ViewPager2.Orientation
vàViewPager2.ScrollState
không còn công khai
Sửa lỗi
SavedState
: Khắc phục sự cố khôi phục khiActivity
bị hủy/tạo lạiSavedState
: trì hoãn khôi phục cho đến khi thiết lập bộ chuyển đổiOnPageChangeCallback
: 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ượngLifecycle
. 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ước
android.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