Paging
Bảng này liệt kê tất cả cấu phần phần mềm trong nhóm androidx.paging
.
Cấu phần phần mềm | 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 |
---|---|---|---|---|
paging-* | 3.3.2 | - | - | - |
paging-compose | 3.3.2 | - | - | - |
Khai báo phần phụ thuộc
Để thêm một phần phụ thuộc trên Paging, bạn phải thêm kho lưu trữ Google Maven vào dự án. Đọc nội dung Kho lưu trữ Maven của Google để biết thêm thông tin.
Thêm các phần phụ thuộc cho cấu phần phần mềm mà bạn cần trong tệp build.gradle
cho ứng dụng hoặc mô-đun:
Groovy
dependencies { def paging_version = "3.3.2" implementation "androidx.paging:paging-runtime:$paging_version" // alternatively - without Android dependencies for tests testImplementation "androidx.paging:paging-common:$paging_version" // optional - RxJava2 support implementation "androidx.paging:paging-rxjava2:$paging_version" // optional - RxJava3 support implementation "androidx.paging:paging-rxjava3:$paging_version" // optional - Guava ListenableFuture support implementation "androidx.paging:paging-guava:$paging_version" // optional - Jetpack Compose integration implementation "androidx.paging:paging-compose:3.3.2" }
Kotlin
dependencies { val paging_version = "3.3.2" implementation("androidx.paging:paging-runtime:$paging_version") // alternatively - without Android dependencies for tests testImplementation("androidx.paging:paging-common:$paging_version") // optional - RxJava2 support implementation("androidx.paging:paging-rxjava2:$paging_version") // optional - RxJava3 support implementation("androidx.paging:paging-rxjava3:$paging_version") // optional - Guava ListenableFuture support implementation("androidx.paging:paging-guava:$paging_version") // optional - Jetpack Compose integration implementation("androidx.paging:paging-compose:3.3.2") }
Để biết thông tin về cách sử dụng các phần mở rộng Kotlin, hãy xem tài liệu ktx.
Để biết thêm thông tin về các phần phụ thuộc, hãy xem bài viết Thêm phần phụ thuộc của bản dựng.
Ý 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 3.3
Phiên bản 3.3.2
Ngày 7 tháng 8 năm 2024
Phát hành androidx.paging:paging-*:3.3.2
. Phiên bản 3.3.2 bao gồm các thay đổi sau.
Tính năng mới
paging-common
vàpaging-testing
đã thêm các mục tiêu mới trên nền tảng Kotlin:watchos
,tvos
vàlinuxArm64
(90c9768), (53e0eca)
Phiên bản 3.3.1
Ngày 24 tháng 7 năm 2024
Phát hành androidx.paging:paging-*:3.3.1
. Phiên bản 3.3.1 bao gồm các thay đổi sau.
Sửa lỗi
- Khắc phục vấn đề
AsyncPagingDataDiffer
hoặc các API được tạo dựa trên đó nhưPagingDataAdapter
được sử dụng vớiRecyclerView
sẽ không thể kích hoạt thêm lượt tải khi nguồn dữ liệu sao lưu được làm mới trong khi cuộn. (I60ca5, b/352586078) - Khắc phục sự cố xảy ra khi các mục bị xoá khỏi nguồn dữ liệu sao lưu trong lúc cuộn
RecyclerView
bằngPagingDataAdapter
hoặcAsyncPagingDataDiffer
. (I8c65a, b/347649763)
Phiên bản 3.3.0
Ngày 14 tháng 5 năm 2024
Phát hành androidx.paging:paging-*:3.3.0
. Phiên bản 3.3.0 bao gồm các thay đổi sau.
Thay đổi quan trọng kể từ phiên bản 3.2.0
PagingDataPresenter
hiện là một lớp công khai. Giờ đây, bạn có thể xây dựng trình trình bày đa nền tảng trênPagingDataPresenter
thay vì yêu cầu API Paging nội bộ hoặcAsyncPagingDataDiffer
củapaging-runtime
.- Thêm các phương thức trợ giúp
LoadStates
vàCombinedLoadStates
mới tronghasError
vàisIdle
để kiểm tra xemLoadStates
đang ở trạng thái Lỗi hayNotLoading
. Ngoài ra, đã thêm một phương thức mở rộng KotlinawaitNotLoading()
mới trênFlow<CombinedLoadStates>
. Phương thức này sẽ chờ cho đến khi quá trình tải chuyển sang trạng tháiNotLoading
hoặc Lỗi. - Theo mặc định,
PagingData.empty()
hiện gửi trạng tháiNotLoading
trừ phiLoadStates
tuỳ chỉnh được truyền đến hàm khởi tạo của nó. Thao tác này khởi hành từ hành vi hiện tại, tức là không gửiLoadStates
khi được gửi đếnPagingDataAdapter
hoặc gửi các trạng thái Đang tải khi được thu thập dưới dạngLazyPagingItems
. Giờ đây, khi được thu thập dưới dạngLazyPagingItems
, đối tượng này cũng sẽ hiển thị một danh sách trống ngay khi kết hợp ban đầu.
Khả năng tương thích đa nền tảng của Kotlin
Paging hiện vận chuyển các cấu phần phần mềm tương thích với Kotlin Multiplatform, một phần lớn nhờ vào công việc được xử lý ngược lại từ dự án multiplatform-paging (nhiều nền tảng của ứng dụng) của MoneyApp.
paging-common
đã di chuyển tất cả API Paging 3 sangcommon
và hiện tương thích với jvm và iOS, ngoài Android.paging-testing
đã chuyển mã sangcommon
và hiện tương thích với jvm và iOS, ngoài Android.paging-compose
đã chuyển mã sangcommon
và gửi một cấu phần phần mềm Android, phù hợp với khả năng hỗ trợ đa nền tảng củaandroidx.compose
.paging-runtime
,paging-guava
,paging-rxjava2
vàpaging-rxjava3
vẫn sẽ chỉ dành cho Android.
Phiên bản 3.3.0-rc01
Ngày 1 tháng 5 năm 2024
androidx.paging:paging-*:3.3.0-rc01
được phát hành mà không có thay đổi nào trong Paging 3.3.0-beta01. Phiên bản 3.3.0-rc01 bao gồm các thay đổi sau.
Phiên bản 3.3.0-beta01
Ngày 3 tháng 4 năm 2024
Phát hành androidx.paging:paging-*:3.3.0-beta01
mà không có thay đổi đáng kể nào. Phiên bản 3.3.0-beta01 bao gồm các thay đổi sau.
Phiên bản 3.3.0-alpha05
Ngày 20 tháng 3 năm 2024
Phát hành androidx.paging:paging-*:3.3.0-alpha05
. Phiên bản 3.3.0-alpha05 bao gồm các thay đổi sau.
Thay đổi về API
- Paging hiện sử dụng chú thích AndroidX Annotation
@MainThread
cho các đoạn mã phổ biến. (I78f0d, b/327682438)
Phiên bản 3.3.0-alpha04
Ngày 6 tháng 3 năm 2024
Phát hành androidx.paging:paging-*:3.3.0-alpha04
. Phiên bản 3.3.0-alpha04 bao gồm các thay đổi sau.
Sửa lỗi
- Sửa các lỗi nhỏ trong tài liệu liên quan đến việc thêm khả năng tương thích đa nền tảng Kotlin. (aosp/2950785)
Phiên bản 3.3.0-alpha03
Ngày 7 tháng 2 năm 2024
Phát hành androidx.paging:paging-*:3.3.0-alpha03
. Phiên bản 3.3.0-alpha03 bao gồm các thay đổi sau.
Tính năng mới
PagingDataPresenter
hiện là một lớp công khai. Giờ đây, bạn có thể xây dựng trình trình bày đa nền tảng trênPagingDataPresenter
thay vì yêu cầu API Paging nội bộ hoặcAsyncPagingDataDiffer
củapaging-runtime
. (Id1f74, b/315214786)- Thêm các phương thức trợ giúp
LoadStates
vàCombinedLoadStates
mới để kiểm tra xemLoadStates
đang ở trạng thái Lỗi hayNotLoading
. Ngoài ra, hãy thêm một API mới chờ trênLoadStateFlow
cho đến khi việc tải chuyển sang trạng tháiNotLoading
hoặc Lỗi. (Id6c67)
Thay đổi về hành vi
- Theo mặc định,
PagingData.empty()
hiện gửi trạng tháiNotLoading
trừ phiLoadStates
tuỳ chỉnh được truyền đến hàm khởi tạo của nó. Thao tác này khởi hành từ hành vi hiện tại, tức là không gửiLoadStates
khi được gửi đếnPagingDataAdapter
hoặc gửi các trạng thái Đang tải khi được thu thập dưới dạngLazyPagingItems
. Giờ đây, khi được thu thập dưới dạngLazyPagingItems
, đối tượng này cũng sẽ hiển thị một danh sách trống ngay khi kết hợp ban đầu. (I4d11d, b/301833847)
Phiên bản 3.3.0-alpha02
Ngày 20 tháng 9 năm 2023
Phát hành androidx.paging:paging-*:3.3.0-alpha02
. Phiên bản 3.3.0-alpha02 bao gồm các thay đổi sau.
Khả năng tương thích đa nền tảng của Kotlin
Paging hiện vận chuyển các cấu phần phần mềm tương thích với Kotlin Multiplatform, một phần lớn nhờ vào công việc được xử lý ngược lại từ dự án multiplatform-paging (nhiều nền tảng của ứng dụng) của MoneyApp. Điều này sẽ giúp chúng ta tránh được sự khác biệt giữa hai kho lưu trữ và đảm bảo tính tương thích giữa hai kho lưu trữ đó.
paging-common
đã di chuyển tất cả API Paging 3 sangcommon
và hiện tương thích với jvm và iOS, ngoài Android.paging-testing
đã chuyển mã sangcommon
và hiện tương thích với jvm và iOS, ngoài Android.paging-compose
đã chuyển mã sangcommon
và gửi một cấu phần phần mềm Android, phù hợp với khả năng hỗ trợ đa nền tảng củaandroidx.compose
.paging-runtime
,paging-guava
,paging-rxjava2
vàpaging-rxjava3
vẫn sẽ chỉ dành cho Android.
Thay đổi về API
- Ngừng sử dụng giao diện Trình ghi nhật ký công khai chỉ dành cho mục đích sử dụng nội bộ (I16e95, b/288623117)
Đóng góp bên ngoài
Phiên bản 3.3.0-alpha01
Ngày 20 tháng 9 năm 2023
- Đây là bản phát hành đa nền tảng đầu tiên của thư viện androidx.paging. Phiên bản này chỉ có các cấu phần phần mềm
*-jvm
và*-android
. Đối với các biến thể macOS, iOS và Linux, hãy sử dụng3.3.0-alpha02
.
Phiên bản 3.2
Phiên bản 3.2.1
Ngày 6 tháng 9 năm 2023
Phát hành androidx.paging:paging-*:3.2.1
. Phiên bản 3.2.1 bao gồm các thay đổi sau.
Sửa lỗi
- Khắc phục vấn đề API
asSnapshot()
của cấu phần phần mềm Kiểm thử Paging sẽ bị treo khi truyền một Flow được tạo bằngPagingData.from(List)
vìasSnapshot()
sẽ không có bất kỳ thông tin nào khi quá trình tải hoàn tất (không giống như phương thức nạp chồngPagingData.from(List, LoadStates)
). Giải pháp này chỉ áp dụng cho các Flow hoàn chỉnh (ví dụ:flowOf(PagingData.from(...))
). Đối với Flow không thể hoàn thành (ví dụ:MutableStateFlow
, sử dụng phương thức nạp chồngPagingData.from
cung cấpLoadStates
). (I502c3) - Paging Compose hiện sử dụng nội bộ
AndroidUiDispatcher.Main
để đảm bảo rằng dữ liệu mới có sẵn trong cùng một khung khi quá trình tải hoàn tất. (Ia55af)
Phiên bản 3.2.0
Ngày 26 tháng 7 năm 2023
Phát hành androidx.paging:paging-*:3.2.0
. Phiên bản 3.2.0 bao gồm các thay đổi sau.
Thay đổi quan trọng kể từ phiên bản 3.1.0
- Paging Compose đã đạt đến độ ổn định của API và đã được hợp nhất trở lại vào phần còn lại của Paging, trong đó phiên bản của nó hiện khớp với tất cả các cấu phần phần mềm Paging khác. Các thay đổi kể từ phiên bản 3.1.0 bao gồm:
- Hỗ trợ xem trước danh sách dữ liệu giả bằng cách tạo
PagingData.from(fakeData)
và góiPagingData
đó trongMutableStateFlow
(ví dụ:MutableStateFlow(PagingData.from(listOf(1, 2, 3)))
). Truyền quy trình này vào các thành phần kết hợp@Preview
ở dạng trình nhận chocollectAsLazyPagingItems()
để xem trước. - Hỗ trợ tất cả bố cục tải từng phần (lazy) như
LazyVerticalGrid
vàHorizontalPager
cũng như các thành phần tải từng phần (lazy) tuỳ chỉnh trên thư viện Wear và TV. Điều này đạt được thông qua các phương thức mở rộngLazyPagingItems
mới cấp thấp hơnitemKey
vàitemContentType
, giúp bạn triển khai tham sốkey
vàcontentType
cho các APIitems
tiêu chuẩn đã tồn tại choLazyColumn
,LazyVerticalGrid
cũng như các API tương đương trong API nhưHorizontalPager
. - Ngừng sử dụng
items(lazyPagingItems)
vàitemsIndexed(lazyPagingItems)
(chỉ hỗ trợLazyListScope
).
- Hỗ trợ xem trước danh sách dữ liệu giả bằng cách tạo
- Cấu phần phần mềm
paging-testing
mới cung cấp các API được thiết kế xoay quanh việc kiểm thử đơn vị từng lớp ứng dụng và tích hợp riêng với Paging. Ví dụ: Chế độ đồng ý bao gồmTestPager
cho phép bạn xác thực hành vi triển khaiPagingSource
tuỳ chỉnh của riêng bạn một cách độc lập với Trình chuyển trang và giao diện người dùng thực.- Các API
asPagingSourceFactory
để chuyển đổiFlow<List<Value>>
hoặcList<Value>
tĩnh thànhPagingSourceFactory
có thể được truyền đến Trình chuyển trang trong các hoạt động kiểm thử - Tiện ích Kotlin
asSnapshot
trênFlow<PagingData<Value>>
, sẽ dịchFlow<PagingData<Value>>
thànhList<Value>
trực tiếp.asSnapshot lambda
cho phép bạn bắt chước giao diện người dùng của ứng dụng thông qua các API nhưscrollTo
hoặcappendScrollWhile
để bạn có thể xác minh ảnh chụp nhanh của dữ liệu là chính xác bất cứ lúc nào trong tập dữ liệu được phân trang.
- Thêm nhật ký mặc định để hiển thị thông tin gỡ lỗi Paging ở hai cấp:
VERBOSE
vàDEBUG
. Bạn có thể bật nhật ký thông qua lệnhadb shell setprop log.tag.Paging [DEBUG|VERBOSE]
. Điều này áp dụng cho cả Paging có khung hiển thị hoặc Paging bằng Compose. - Thêm các hàm dựng cho
PagingDataAdapter
vàAsyncPagingDataDiffer
chấp nhậnCoroutineContext
thay vìCoroutineDispatcher
. - Thêm giao diện chức năng
PagingSourceFactory
mới cung cấp giao diện API rõ ràng hơn so với giao diện () trước đó -> Hàm lambdaPagingSource
. Bạn có thể dùng nhà máy này để tạo thực thể cho một Trình chuyển trang.
Phiên bản 3.2.0-rc01
Ngày 21 tháng 6 năm 2023
Phát hành androidx.paging:paging-*:3.2.0-rc01
. Phiên bản 3.2.0-rc01 bao gồm các thay đổi sau.
Đóng góp bên ngoài
- Cảm ơn Veyndan đã đóng góp vào việc di chuyển Paging khỏi các thông số cụ thể của Android/JVM. (#553, #554, #555, #559)
Phiên bản 3.2.0-beta01
Ngày 7 tháng 6 năm 2023
Phát hành androidx.paging:paging-*:3.2.0-beta01
. Phiên bản 3.2.0-beta01 bao gồm các thay đổi sau.
Paging Compose
- Paging Compose đã chính thức đạt đến độ ổn định về API. Do đó, phiên bản đã được cập nhật từ
1.0.0-alpha20
để hiện khớp với phiên bản của tất cả cấu phần phần mềm Paging khác.
Thay đổi về API
- Xoá các API
items(LazyPagingItems)
vàitemsIndexed(LazyPagingItems)
không dùng nữa khỏi Paging Compose. Hãy xem ghi chú phát hành1.0.0-alpha20
của Paging Compose để biết ví dụ về các API thay thế. (I9626e)
Phiên bản 3.2.0-alpha06
Ngày 24 tháng 5 năm 2023
Phát hành androidx.paging:paging-*:3.2.0-alpha06
. Phiên bản 3.2.0-alpha06 bao gồm các thay đổi sau.
Tính năng mới
- Thêm giao diện chức năng
PagingSourceFactory
mới cung cấp một nền tảng API rõ ràng hơn so với các hàm lambda() -> PagingSource
hiện có. Bạn có thể dùng nhà máy này để tạoPager
. (I33165, b/280655188) - Thêm API
paging-testing
mới củaList<Value>.asPagingSourceFactory()
để cóPagingSourceFactory
mà chỉ tải từ danh sách dữ liệu không thể thay đổi. Bạn vẫn nên sử dụng tiện ích hiện có trênFlow<List<Value>>
để kiểm thử với nhiều thế hệ dữ liệu tĩnh. (Id34d1, b/280655188)
Thay đổi về API
- Giờ đây, tất cả API công khai trong kiểm thử phân trang đều được chú thích bằng
@VisibleForTesting
để đảm bảo chỉ dùng các API này trong kiểm thử. (I7db6e) - API
asSnapshot
không còn yêu cầu truyềnCoroutineScope
vào nữa. Giờ đây, theo mặc định, lớp này sẽ sử dụng bối cảnh kế thừa từ phạm vi mẹ. (Id0a78, b/282240990) - Sắp xếp lại các tham số hàm khởi tạo
TestPager
để khớp trực quan với thứ tự của các tham số hàm khởi tạoPager
thực (I6185a) - Di chuyển việc sử dụng loại lambda
() -> PagingSource<Key, Value>
của tính năng phân trang để nhậpPagingSourceFactory<Key, Value>
. (I4a950, b/280655188)
Thay đổi về hành vi
- Bạn không còn cần trình điều phối chính để chạy kiểm thử Paging
asSnapshot
. Việc đặt giá trị này sẽ không làm thay đổi hành vi kiểm thử nữa. (Ie56ea)
Phiên bản 3.2.0-alpha05
Ngày 3 tháng 5 năm 2023
Phát hành androidx.paging:paging-*:3.2.0-alpha05
. Phiên bản 3.2.0-alpha05 bao gồm các thay đổi sau.
Thay đổi về API
- API Kiểm thử Paging của
asSnapshot
hiện đặt mặc định tham sốloadOperations
là một hàm lambda trống. Điều này cho phép gọiasSnapshot
mà không cần truyền bất kỳ thao tác tải nào để truy xuất dữ liệu từ lượt tải làm mới ban đầu. (Ied354, b/277233770)
Những điểm cải tiến về tài liệu
- Cập nhật tài liệu trên
asPagingSourceFactory()
để làm rõ rằng đây là một phương thức mở rộng trênFlow
. Phương thức này trả về nhà máy có thể sử dụng lại để tạo các thực thểPagingSource
. (I5ff4f, I705b5) - Cập nhật tài liệu về hàm khởi tạo
LoadResult.Page
để làm rõ sự cần thiết phải ghi đèitemsBefore
vàitemsAfter
để hỗ trợ việc nhảy. (Ied354)
Đóng góp bên ngoài
- Cảm ơn Veyndan đã đóng góp vào việc di chuyển Paging khỏi các thông số cụ thể của Android/JVM. (#525, #523, #520, #519, #507, #506, #505, #499, #497, #496, #493)
Phiên bản 3.2.0-alpha04
Ngày 8 tháng 2 năm 2023
Phát hành androidx.paging:paging-*:3.2.0-alpha04
. Phiên bản 3.2.0-alpha04 bao gồm các thay đổi sau.
Kiểm thử Paging
- Cấu phần phần mềm
paging-testing
hiện chứa một phương thứcasPagingSourceFactory
để tạopagingSourceFactory
từFlow<List<Value>>
được cung cấp cho Trình chuyển trang. MỗiList<Value>>
được tạo ra từ Flow (Luồng) đại diện cho một lượt tạo dữ liệu được phân trang. Việc này tạo điều kiện thuận lợi cho các lượt kiểm thử phân trang, chẳng hạn như khi chuyển đổiPagingData
bằng cách tạo ra một nguồn dữ liệu để Trình chuyển trang thu thập dữ liệu. (I6f230, b/235528239) Cấu phần phần mềm
paging-testing
đã được mở rộng bằng các API mới phù hợp để xác minh dữ liệu có trongFlow<PagingData<T>>
là chính xác. Ví dụ: bạn có thể sử dụng cấu phần phần mềm này để xác nhận đầu ra củaFlow<PagingData<T>>
từ lớp ViewModel.Bạn có thể thực hiện việc này qua tiện ích Kotlin
asSnapshot
trênFlow<PagingData<Value>>
, giúp chuyểnFlow<PagingData<Value>>
thànhList<Value>
trực tiếp. Hàm lambdaasSnapshot
giúp bạn bắt chước giao diện người dùng của ứng dụng thông qua các API nhưscrollTo
hoặcappendScrollWhile
theo cách có thể lặp lại và nhất quán để bạn có thể xác minh ảnh chụp nhanh của dữ liệu là chính xác ở bất cứ điểm nào trong tập dữ liệu phân trang.// Create your ViewModel instance val viewModel = … // Get the Flow of PagingData from the ViewModel val data< Flow<PagingData<String>> = viewModel.data val snapshot: List<String> = data.asSnapshot { // Each operation inside the lambda waits for the data to settle before continuing scrollTo(index = 50) // While you can’t view the items within the asSnapshot call, // you can continuously scroll in a direction while some condition is true // i.e., in this case until you hit a placeholder item appendScrollWhile { item: String -> item != “Header 1” } } // With the asSnapshot complete, you can now verify that the snapshot // has the expected values
asSnapshot
là một phương thứcsuspend
dự kiến sẽ chạy trongrunTest
. Hãy xem bài viết Kiểm thử coroutine của Kotlin trên Android để biết thêm thông tin. (I55fd2, I5bd26, I7ce34, I51f4d, I2249f, Id6223, Ic4bab, Ib29b9, Ic1238, I96def, b/235528239)
Các thay đổi về API
- Các lệnh gọi giao diện người dùng đến
getItem
vàpeek
trongAsyncPagingDataDiffer
vàPagingDataAdapter
hiện được đánh dấu chính xác là chỉ có thể gọi trên Luồng chính. (I699b6) - Xoá ký tự đại diện khỏi các loại chung được
TestPager
sử dụng, giúp bạn dễ dàng dùng kết quả của các phương thức đó trong mã viết bằng ngôn ngữ lập trình Java. (I56c42)
Phiên bản 3.2.0-alpha03
Ngày 24 tháng 10 năm 2022
Phát hành androidx.paging:paging-*:3.2.0-alpha03
. Phiên bản 3.2.0-alpha03 bao gồm các thay đổi sau.
Kiểm thử Paging
Bản phát hành này chứa một cấu phần phần mềm mới: paging-testing
. Cấu phần phần mềm này cung cấp các API được thiết kế xoay quanh việc kiểm thử đơn vị từng lớp ứng dụng và việc tích hợp riêng ứng dụng với Paging.
Ví dụ: bản phát hành đầu tiên này bao gồm một lớp TestPager
cho phép bạn xác thực hành vi của cách triển khai PagingSource
tuỳ chỉnh của riêng bạn độc lập với Pager
và giao diện người dùng thực tế mà bạn thường cần để mô phỏng quá trình tích hợp Paging từ đầu đến cuối.
TestPager
phải được coi là giả – một quy trình kiểm thử kép phản ánh cách triển khai thực tế của Pager
, đồng thời cung cấp nền tảng API đã đơn giản hoá để kiểm thử PagingSource
. Các API này là các API suspend
và bạn nên chạy trong runTest
như đã nêu trong hướng dẫn Kiểm thử coroutine của Kotlin trên Android.
Bạn có thể xem ví dụ về các API này đang được dùng trong các chương trình kiểm thử room-paging
. Các API này được tái cấu trúc để sử dụng TestPager
.
Các thay đổi về API
- Cho phép lặp lại thuận tiện qua
LoadResult.Page.data
đếnLoadResult.Page.iterator()
. Điều này gián tiếp cho phép sử dụng phương thứcflatten
cho thư viện chuẩn Kotlin khi được cung cấpList<LoadResult.Page>
, chẳng hạn như với thuộc tínhpages
củaPagingState
được truyền đến phương thứcPagingSource.getRefreshKey
. (Ie0718)
Phiên bản 3.2.0-alpha02
Ngày 10 tháng 8 năm 2022
Phát hành androidx.paging:paging-*:3.2.0-alpha02
. Phiên bản 3.2.0-alpha02 bao gồm các thay đổi sau.
Tính năng mới
- Paging hiện cung cấp nhật ký thông qua các lớp
AsyncPagingDataDiffer
hoặcPagingDataAdapter
để hiển thị thông tin gỡ lỗi được thu thập từPagingData
. - Bạn có thể bật tính năng nhật ký thông qua lệnh
adb shell
adb shell setprop log.tag.Paging [DEBUG|VERBOSE].
(b/235527159)
Sửa lỗi
- Khắc phục lỗi thiếu hàm khởi tạo
PagingDataDiffer
khi sử dụngpaging-common:3.2.0-alpha01
với thời gian chạypaging-runtime:3.1.1
trở về trước.(b/235256201)
Phiên bản 3.2.0-alpha01
Ngày 1 tháng 6 năm 2022
Phát hành androidx.paging:paging-*:3.2.0-alpha01
. Phiên bản 3.2.0-alpha01 bao gồm các thay đổi sau.
Thay đổi về API
- Thêm các hàm dựng cho
PagingDataAdapter
vàAsyncPagingDataDiffer
chấp nhậnCoroutineContext
thay vìCoroutineDispatcher
. (Idc878) - Theo mặc định,
PagingData.from()
vàPagingData.empty()
sẽ không còn ảnh hưởng đếnCombinedLoadStates
ở phía người trình bày. Quá tải mới cho phép truyềnsourceLoadStates
vàremoteLoadStates
vào các hàm dựng đã được thêm vào này để duy trì hành vi hiện tại của việc đặtLoadStates
thành thiết bị đầu cuối hoàn toàn (tức làNotLoading(endOfPaginationReached = false)
), với tùy chọn bao gồm các trạng thái từ xa nếu cần. NếuLoadStates
không được truyền, thìCombinedLoadStates
trước đó sẽ được duy trì ở phía người trình bày khi nó nhận đượcPagingData
tĩnh. (Ic3ce5, b/205344028)
Sửa lỗi
- Kết quả của
PagingSource.getRefreshKey()
hiện đã được đánh giá chính xác trêninitialKey
trong trường hợp trả về giá trị null, nhưng mộtinitialKey
không có giá trị null đã được đặt. (Ic9542, b/230391606)
Đóng góp bên ngoài
- Cập nhật :compose:ui:ui-test api (updateApi) do di chuyển test-coroutines-lib (I3366d)
Phiên bản 3.1
Phiên bản 3.1.1
Ngày 9 tháng 3 năm 2022
Phát hành androidx.paging:paging-*:3.1.1
. Phiên bản 3.1.1 bao gồm các thay đổi sau.
Sửa lỗi
- Đã xoá các sự kiện
LoadState.NotLoading
trung gian giữa những thế hệ được.cachedIn()
chèn không chính xác. Thay đổi này giúp bạn dễ dàng phản ứng với các thay đổi trênLoadState
bằng cách xoá các sự kiệnLoadState.NotLoading
thừa được tạo ra giữa những lần thử tải lại không thành công khi làm mới hoặc trong trường hợp không hợp lệ.
Phiên bản 3.1.0
Ngày 17 tháng 11 năm 2021
Phát hành androidx.paging:paging-*:3.1.0
. Phiên bản 3.1.0 bao gồm các thay đổi sau.
Thay đổi quan trọng kể từ phiên bản 3.0.0
- Các API
Flow<PagingData>.observable
vàFlow<PagingData>.flowable
không còn mang tính thử nghiệm nữa - Các thay đổi về hành vi đối với
LoadState
:endOfPaginationReached
hiện tại luôn làfalse
trongLoadType.REFRESH
cho cảPagingSource
vàRemoteMediator
LoadStates
từ Paging đang chờ các giá trị hợp lệ từ cảPagingSource
vàRemoteMediator
trước khi phát xuống dưới. Các thế hệPagingData
mới hiện sẽ luôn bắt đầu đúng bằngLoading
để có trạng thái làm mới thay vì đặt lại về trạng tháiNotLoading
không chính xác trong một số trường hợp..loadStateFlow
và.addLoadStateListener
trên API của nội dung trình bày không còn gửi thừaCombinedLoadStates
ban đầu khiến các trạng thái dàn xếp luôn được đặt thànhnull
- Việc huỷ các thế hệ trước hiện sẽ xảy ra trong trường hợp không hợp lệ / thế hệ mới. Bạn không cần phải sử dụng
.collectLatest
trênFlow<PagingData>
nữa, mặc dù chúng tôi vẫn khuyên bạn nên làm như vậy. PagingSource.LoadResult.Invalid
đã được thêm làm loại dữ liệu trả về mới từPagingSource.load
, khiến Paging loại bỏ mọi yêu cầu tải đang chờ xử lý hoặc trong tương lai đối vớiPagingSource
này và vô hiệu hoá nó. Loại dữ liệu trả về này được thiết kế để xử lý dữ liệu có khả năng không hợp lệ hoặc lỗi thời có thể bị trả về từ cơ sở dữ liệu hoặc mạng.- Thêm các API trình bày
.onPagesPresented
và.addOnPagesUpdatedListener
đã kích hoạt đồng bộ khi các trang được hiển thị trong giao diện người dùng. Việc cập nhật trang có thể xảy ra trong các trường hợp sau:- Lần tải thế hệ PagingData mới đầu tiên sẽ được hoàn tất, bất kể thế hệ mới có bất kỳ thay đổi nào đối với các mục đã được trình bày hay không. tức là Khi thế hệ mới hoàn tất lần tải đầu tiên mà không có nội dung cập nhật nào vì danh sách vẫn giữ nguyên như vậy, thì lệnh gọi lại này vẫn được kích hoạt.
- Một trang sẽ được chèn, ngay cả khi trang được chèn không có mục mới nào.
- Một trang sẽ bị bỏ qua, ngay cả khi trang bị bỏ qua không có mục nào.
Phiên bản 3.1.0-rc01
Ngày 3 tháng 11 năm 2021
Phát hành androidx.paging:paging-*:3.1.0-rc01
. Phiên bản 3.1.0-rc01 bao gồm các thay đổi sau.
Sửa lỗi
- Sửa một điều kiện thực hiện + rò rỉ bộ nhớ trong .cachedIn() trong trường hợp nhiều sự kiện tải được gửi đi bởi Paging tiếp theo trong khi không có các nội dung ghi nhận nào hoặc từ khi một nội dung ghi nhận chuyển sang PagingData mới. (Ib682e)
Phiên bản 3.1.0-beta01
Ngày 13 tháng 10 năm 2021
Phát hành androidx.paging:paging-*:3.1.0-beta01
. Phiên bản 3.1.0-beta01 bao gồm các thay đổi sau.
Sửa lỗi
- Sửa lỗi có quá nhiều lượt truy cập nhanh vào mục khiến chúng bị bỏ qua để xem xét trong prefetchDistance, khiến việc tải trang bị treo. Điều này đặc biệt quan trọng khi nhiều mục được bố trí cùng một lúc theo thứ tự ưu tiên việc tải theo hướng cuộn của người dùng. Các lượt truy cập vào mục này hiện đã được lưu vào bộ đệm và được ưu tiên đồng bộ để ngăn không cho chúng bị bỏ qua. (aosp/1833273)
Phiên bản 3.1.0-alpha04
Ngày 29 tháng 9 năm 2021
Phát hành androidx.paging:paging-*:3.1.0-alpha04
. Phiên bản 3.1.0-alpha04 bao gồm các thay đổi sau.
Thay đổi về API
- Các API
Flow<PagingData>.observable
vàFlow<PagingData>.flowable
không còn mang tính thử nghiệm nữa. (Ie0bdd)
Sửa lỗi
- Đối với loadStates,
endOfPaginationReached
hiện luôn làfalse
choLoadType.REFRESH
. Trước đây, endOfPaginationReached có thể làtrue
cho RemoteMediatorREFRESH
chứ không phải là PagingSource. Hành vi này hiện được hợp nhất để luôn trả vềfalse
vì sẽ không có ý nghĩa khi REFRESH là thiết bị đầu cuối và hiện được đưa vào tài liệu như một phần của sự co rút ngắn API trong LoadStates. Khi quyết định xem việc phân trang có bị chấm dứt hay không, bạn phải luôn thực hiện điều này theo hướng dẫn về APPEND hoặc PREPEND. (I047b6) Hiện giờ, LoadStates từ Paging đang chờ các giá trị hợp lệ từ cả PagingSource và RemoteMediator trước khi phát xuống dưới giữa các thế hệ. Việc này ngăn các thế hệ mới của PagingData gửi đi NotLoading trong CombinedLoadStates.source.refresh nếu nó đã là Loading; các thế hệ mới của PagingData hiện sẽ luôn bắt đầu đúng cách với Loading cho trạng thái làm mới thay vì đặt lại về trạng thái NotLoading một cách không chính xác ngay từ đầu trong một số trường hợp.
Giờ đây, việc huỷ các thế hệ trước sẽ xảy ra trong trường hợp không hợp lệ / thế hệ mới. Bạn không cần phải sử dụng .collectLatest trên
Flow<PagingData>
nữa, mặc dù chúng tôi vẫn khuyên bạn nên làm như vậy. (I0b2b5, b/177351336, b/195028524).loadStateFlow
và.addLoadStateListener
trên API trình bày không còn gửi thừaCombinedLoadStates
ban đầu khiến các trạng thái dàn xếp luôn được đặt thànhnull
và trạng thái nguồn được đặt thànhNotLoading(endOfPaginationReached = false)
. Điều này có nghĩa là:- các trạng thái dàn xếp sẽ luôn được điền sẵn nếu bạn sử dụng RemoteMediator.
- Việc đăng ký một trình nghe loadState mới hoặc một trình thu thập mới trên
.loadStateFlow
sẽ không còn phát ra ngay giá trị hiện tại nữa nếu chưa nhận đượcCombinedLoadStates
thực sự từPagingData
. Điều này có thể xảy ra nếu một trình thu thập hoặc trình nghe bắt đầu trước khiPagingData
được gửi. (I1a748)
Phiên bản 3.1.0-alpha03
Ngày 21 tháng 7 năm 2021
Phát hành androidx.paging:paging-*:3.1.0-alpha03
. Phiên bản 3.1.0-alpha03 bao gồm các thay đổi sau.
Thay đổi về API
Loại dữ liệu trả về LoadResult thứ ba trong LoadResult.Invalid được thêm vào PagingSource. Khi PagingSource.load trả về LoadResult.Invalid, Paging sẽ loại bỏ dữ liệu đã tải và vô hiệu hoá PagingSource. Loại dữ liệu trả về này được thiết kế để xử lý dữ liệu có khả năng không hợp lệ hoặc lỗi thời có thể bị trả về từ cơ sở dữ liệu hoặc mạng.
Ví dụ: nếu cơ sở dữ liệu ban đầu được viết vào nhưng PagingSource không vô hiệu hoá kịp thời, thì cơ sở dữ liệu đó có thể trả về các kết quả không nhất quán nếu việc triển khai phụ thuộc vào tính bất biến của tập dữ liệu sao lưu mà kết quả được tải từ đó (ví dụ: triển khai kiểu GIỚI HẠN CHÊNH LỆCH db). Trong trường hợp này, bạn nên kiểm tra trạng thái không hợp lệ sau khi tải và trả về LoadResult.Invalid, khiến Paging loại bỏ bất kỳ yêu cầu tải đang chờ xử lý hoặc trong tương lai nào đối với PagingSource này và vô hiệu hoá nó.
Loại dữ liệu trả về này cũng được hỗ trợ bởi API Paging2, trong đó sử dụng LivePagedList hoặc RxPagedList. Khi sử dụng một PagingSource với API PagedList của Paging2, PagedList được tách ra ngay lập tức, dừng các lần thử tải dữ liệu khác trên PagedList này và trình kích hoạt vô hiệu hoá trên PagingSource.
loadResult là một lớp kín, tức là đây là một thay đổi không tương thích với nguồn, chẳng hạn như các trường hợp sử dụng trực tiếp bằng kết quả PagingSource.load. Kết quả sẽ là để xử lý LoadResult.Invalid tại thời gian biên dịch. Ví dụ: người dùng Kotlin sử dụng biểu thức exhaustive-when để kiểm tra loại dữ liệu trả về sẽ phải đánh dấu vào loại Không hợp lệ. (Id6bd3, b/191806126, b/192013267)
Sửa lỗi
- Giờ đây, các lệnh gọi lại vô hiệu hoá được thêm qua PagingSource.registerInvalidatedCallback hoặc DataSource.addInvalidatedCallback sẽ tự động kích hoạt nếu các lệnh đó được đăng ký trên PagingSource / DataSource vốn đã không hợp lệ. Điều này giải quyết một điều kiện tranh đấu khiến Paging bỏ qua các tín hiệu không hợp lệ và bị mắc kẹt khi được cung cấp một Nguồn vốn đã không hợp lệ trong lần tải đầu tiên. Ngoài ra, các lệnh gọi lại vô hiệu hoá hiện sẽ bị xoá đúng cách sau khi được kích hoạt vì các lệnh gọi lại này được đảm bảo sẽ được gọi nhiều nhất một lần. (I27e69)
- Gửi giá trị ban đầu của phần giữ chỗ (InitialPagedList) từ luồng PagedList mới được tạo phiên bản, ví dụ: LivePagedListBuilder hoặc RxPagedListBuilder sẽ không xoá dữ liệu được tải trước đó nữa.
Phiên bản 3.1.0-alpha02
Ngày 1 tháng 7 năm 2021
Phát hành androidx.paging:paging-*:3.1.0-alpha02
. Phiên bản 3.1.0-alpha02 bao gồm các thay đổi sau.
Tính năng mới
Thêm vào trình nghe onPagesPresented và các API trình bày theo luồng kích hoạt ngay sau khi các trang trình bày được cập nhật trong giao diện người dùng.
Vì những bản cập nhật này đồng bộ với giao diện người dùng, nên bạn có thể gọi các phương thức trình chuyển đổi như .snapshot, .getItemCount, để kiểm tra trạng thái sau khi sử dụng bản cập nhật đó. Xin lưu ý rằng .snapshot() được để lại để gọi một cách rõ ràng vì có thể tốn kém khi thực hiện việc này trên tất cả các bản cập nhật.
Việc cập nhật trang có thể xảy ra trong các trường hợp sau:
- Hoàn tất lần tải thế hệ PagingData mới đầu tiên, bất kể thế hệ mới có bất kỳ thay đổi nào đối với các mục đã được trình bày hay không. tức là Khi thế hệ mới hoàn tất lần tải đầu tiên mà không có nội dung cập nhật nào vì danh sách vẫn giữ nguyên như vậy, thì lệnh gọi lại này vẫn được kích hoạt.
- Một trang sẽ được chèn, ngay cả khi trang được chèn không có mục mới nào
- Một trang sẽ bị bỏ qua, ngay cả khi trang bị bỏ qua không có mục nào (I272c9, b/189999634)
Sửa lỗi
- Việc truy cập PagedList.dataSource từ giá trị ban đầu do LivePagedList hoặc RxPagedList tạo ra sẽ không còn gửi nhầm IllegalStateException (I96707) nữa
Phiên bản 3.1.0-alpha01
Ngày 2 tháng 6 năm 2021
Phát hành androidx.paging:paging-*:3.1.0-alpha01
. Phiên bản 3.1.0-alpha01 bao gồm các thay đổi sau.
Thay đổi về API
- Các lớp do
paging-rxjava3
cung cấp hiện nằm trong góiandroidx.paging.rxjava3
để không xung đột vớipaging-rxjava2
(Ifa7f6)
Sửa lỗi
- Sửa lỗi khi Paging đôi khi gửi sự kiện khác không hoạt động đến RecyclerView, có thể khiến một số trình nghe kích hoạt sớm. (Ic507f, b/182510751)
Đóng góp bên ngoài
- Thêm các API có khả năng tương thích với PagedList không dùng nữa vào cấu phần phần mềm rxjava3 (Id1ce2, b/182497591)
Paging Compose Phiên bản 1.0.0
Phiên bản 1.0.0-alpha20
Ngày 24 tháng 5 năm 2023
Phát hành androidx.paging:paging-compose:1.0.0-alpha20
. Phiên bản 1.0.0-alpha20 bao gồm các thay đổi sau.
Tính năng mới
- Paging Compose hiện hỗ trợ xem trước danh sách dữ liệu giả bằng cách tạo một
PagingData.from(fakeData)
và góiPagingData
đó trongMutableStateFlow
(ví dụ:MutableStateFlow(PagingData.from(listOf(1, 2, 3)))
). Khi sử dụng dữ liệu đó làm dữ liệu đầu vào cho@Preview
, các lệnh gọi đếncollectAsLazyPagingItems()
sẽ cung cấpLazyPagingItems
có thể xem trước. (I8a78d, b/194544557)
Sửa lỗi
- Giờ đây, dữ liệu được lưu vào bộ nhớ đệm từ
pager.flow.cachedIn
đã được thu thập trongLazyPagingItems
sẽ có sẵn ngay sau khi khôi phục trạng thái mà không yêu cầu thu thập không đồng bộ. Điều này có nghĩa là dữ liệu được lưu vào bộ nhớ đệm sẽ sẵn sàng để hiển thị ngay khi kết hợp ban đầu sau khi trạng thái được khôi phục. (I97a60, b/177245496)
Phiên bản 1.0.0-alpha19
Ngày 3 tháng 5 năm 2023
Phát hành androidx.paging:paging-compose:1.0.0-alpha19
. Phiên bản 1.0.0-alpha19 bao gồm các thay đổi sau.
Hỗ trợ tất cả bố cục tải từng phần
Trước đây, Paging Compose cung cấp các tiện ích tuỳ chỉnh items
và itemsIndexed
trên LazyListScope
, nghĩa là bạn không thể sử dụng Paging Compose với các bố cục tải từng phần khác như LazyVerticalGrid
, HorizontalPager
hoặc các thành phần tải từng phần tuỳ chỉnh khác do thư viện Wear và TV cung cấp. Giải quyết vấn đề linh hoạt này là bản cập nhật chính cho bản phát hành này.
Để hỗ trợ thêm bố cục tải từng phần, chúng ta cần tạo các API ở một lớp khác – thay vì cung cấp một API items
tuỳ chỉnh cho từng bố cục tải từng phần, Paging Compose hiện cung cấp các phương thức mở rộng cấp thấp hơn một chút trên LazyPagingItems
trong itemKey
và itemContentType
. Các API này tập trung vào việc giúp bạn triển khai tham số key
và contentType
cho các API items
tiêu chuẩn đã tồn tại cho LazyColumn
, LazyVerticalGrid
cũng như các API tương đương trong các API như HorizontalPager
. (Ifa13b, Ib04f0, b/259385813)
Điều này có nghĩa là việc hỗ trợ LazyVerticalGrid
sẽ trông giống như sau:
// This part is unchanged
val lazyPagingItems = pager.collectAsLazyPagingItems()
LazyVerticalGrid(columns = GridCells.Fixed(2)) {
// Here we use the standard items API
items(
count = lazyPagingItems.itemCount,
// Here we use the new itemKey extension on LazyPagingItems to
// handle placeholders automatically, ensuring you only need to provide
// keys for real items
key = lazyPagingItems.itemKey { it.uniqueId },
// Similarly, itemContentType lets you set a custom content type for each item
contentType = lazyPagingItems.itemContentType { "contentType" }
) { index ->
// As the standard items call provides only the index, we get the item
// directly from our lazyPagingItems
val item = lazyPagingItems[index]
PagingItem(item = item)
}
}
Để biết thêm ví dụ về cách sử dụng các API mới này, vui lòng xem các mẫu của chúng tôi.
Mặc dù những thay đổi này khiến các ví dụ LazyColumn
và LazyRow
dài hơn một vài dòng, nhưng chúng tôi cảm thấy rằng tính nhất quán trên tất cả các bố cục tải từng phần là một yếu tố quan trọng đối với những người sử dụng Paging Compose trong tương lai. Vì lý do đó, các tiện ích hiện có cho LazyListScope
hiện không được dùng nữa. (I0c459, I92c8f, b/276989796)
Thay đổi về API
- Để dễ dàng di chuyển sang các API mới, các hàm mở rộng
items
vàitemsIndexed
trênLazyListScope
hiện hỗ trợ tham sốcontentType
, phản ánh hỗ trợ trong các API mới. (Ib1918, b/255283378)
Thông tin cập nhật về phần phụ thuộc
- Paging Compose đã cập nhật phần phụ thuộc từ Compose 1.0.5 lên Compose 1.2.1. (Ib1918, b/255283378)
Phiên bản 1.0.0-alpha18
Ngày 8 tháng 2 năm 2023
Phát hành androidx.paging:paging-compose:1.0.0-alpha18
mà không có thay đổi nào. Phiên bản 1.0.0-alpha18 bao gồm các thay đổi sau.
Phiên bản 1.0.0-alpha17
Ngày 24 tháng 10 năm 2022
Phát hành androidx.paging:paging-compose:1.0.0-alpha17
. Phiên bản 1.0.0-alpha17 bao gồm các thay đổi sau.
Tính năng mới
- Thêm tính năng hỗ trợ cho một
CoroutineContext
tuỳ chỉnh khi gọicollectLazyPagingItems
. (I7a574, b/243182795, b/233783862)
Phiên bản 1.0.0-alpha16
Ngày 10 tháng 8 năm 2022
Phát hành androidx.paging:paging-compose:1.0.0-alpha16
. Phiên bản 1.0.0-alpha16 bao gồm các thay đổi sau.
Tính năng mới
- Paging hiện cung cấp nhật ký thông qua lớp
LazyPagingItems
để hiển thị thông tin gỡ lỗi được thu thập từ PagingData. - Bạn có thể bật tính năng nhật ký thông qua lệnh
adb shell
adb shell setprop log.tag.Paging [DEBUG|VERBOSE]
. ([b/235527159}(https://issuetracker.google.com/issues/235527159))
Sửa lỗi
- Khắc phục lỗi thiếu hàm khởi tạo
PagingDataDiffer
khi sử dụngpaging-compose:1.0.0-alpha15
vớipaging-common:3.1.1
trở về trước. (b/235256201, b/239868768)
Phiên bản 1.0.0-alpha15
Ngày 1 tháng 6 năm 2022
Phát hành androidx.paging:paging-compose:1.0.0-alpha15
. Phiên bản 1.0.0-alpha15 bao gồm các thay đổi sau.
Thay đổi về API
- Thêm các hàm dựng cho
PagingDataAdapter
vàAsyncPagingDataDiffer
chấp nhậnCoroutineContext
thay vìCoroutineDispatcher
. (Idc878)
Sửa lỗi
- Giờ đây,
LazyPagingItems
sẽ đặtloadState
ban đầu để làm mớiLoadState.Loading
. (I55043, b/224855902)
Phiên bản 1.0.0-alpha14
Ngày 13 tháng 10 năm 2021
Phát hành androidx.paging:paging-compose:1.0.0-alpha14
. Phiên bản 1.0.0-alpha14 bao gồm các thay đổi sau.
Phiên bản 1.0.0-alpha13
Ngày 29 tháng 9 năm 2021
Phát hành androidx.paging:paging-compose:1.0.0-alpha13
. Phiên bản 1.0.0-alpha13 bao gồm các thay đổi sau.
Thay đổi về API
- Hàm
LazyPagingItems.snapshot()
đã được thay thế bằng thuộc tínhLazyPagingItems.itemSnapshotList
(Ie2da8) - Đã xoá
LazyPagingItems.getAsState()
không dùng nữa (Ie65e4)
Phiên bản 1.0.0-alpha12
Ngày 21 tháng 7 năm 2021
Phát hành androidx.paging:paging-compose:1.0.0-alpha12
. Phiên bản 1.0.0-alpha12 bao gồm các thay đổi sau.
Thay đổi về API
- Giờ đây,
items(lazyPagingItems)
vàitemsIndexed(lazyPagingItems)
dùng để kết nối Paging vớiLazyColumn/Row
chấp nhận thông số khoá tuỳ chọn, cho phép bạn chỉ định một khoá ổn định đại diện cho mục. Bạn có thể đọc thêm về các khoá tại đây. (I7986d) - Giờ đây, hàm
lazyPagingItems.getAsState(index)
không còn dùng nữa. Thay vào đó, hãy sử dụnglazyPagingItems[index]
. (I086cb, b/187339372)
Phiên bản 1.0.0-alpha11
Ngày 30 tháng 6 năm 2021
Phát hành androidx.paging:paging-compose:1.0.0-alpha11
. Phiên bản 1.0.0-alpha11 bao gồm các thay đổi sau.
Phiên bản 1.0.0-alpha10
Ngày 2 tháng 6 năm 2021
Phát hành androidx.paging:paging-compose:1.0.0-alpha10
. Phiên bản 1.0.0-alpha10 bao gồm các thay đổi sau.
Phiên bản 1.0.0-alpha09
Ngày 18 tháng 5 năm 2021
Phát hành androidx.paging:paging-compose:1.0.0-alpha09
. Phiên bản 1.0.0-alpha09 bao gồm các thay đổi sau.
Sửa lỗi
- Chúng tôi hiện có thể quan sát được itemCount và phương thức getter của mục thuộc LazyPagingItems, cho phép sử dụng nó với cả LazyVerticalGrid (Ie2446, b/171872064, b/168285687
Khả năng tương thích với ứng dụng Compose
androidx.paging:paging-compose:1.0.0-alpha09
chỉ tương thích với ứng dụng Compose phiên bản1.0.0-beta07
trở lên.
Phiên bản 1.0.0-alpha08
Ngày 24 tháng 2 năm 2021
Phát hành androidx.paging:paging-compose:1.0.0-alpha08
. Phiên bản 1.0.0-alpha08 bao gồm các thay đổi sau.
Cập nhật để tích hợp với Compose 1.0.0-beta01.
Phiên bản 1.0.0-alpha07
Ngày 10 tháng 2 năm 2021
Phát hành androidx.paging:paging-compose:1.0.0-alpha07
. Phiên bản 1.0.0-alpha07 bao gồm các thay đổi sau.
Cập nhật để tích hợp với Compose alpha12.
Phiên bản 1.0.0-alpha06
Ngày 28 tháng 1 năm 2021
Phát hành androidx.paging:paging-compose:1.0.0-alpha06
. Phiên bản 1.0.0-alpha06 bao gồm các thay đổi sau.
Sửa lỗi
Cập nhật để phụ thuộc vào Compose 1.0.0-alpha11.
Phiên bản 1.0.0-alpha05
Ngày 13 tháng 1 năm 2021
Phát hành androidx.paging:paging-compose:1.0.0-alpha05
. Phiên bản 1.0.0-alpha05 bao gồm các thay đổi sau.
Cập nhật để phụ thuộc vào Compose 1.0.0-alpha10.
Phiên bản 1.0.0-alpha04
Ngày 16 tháng 12 năm 2020
Phát hành androidx.paging:paging-compose:1.0.0-alpha04
. Phiên bản 1.0.0-alpha04 bao gồm các thay đổi sau.
Sửa lỗi
- Cập nhật các thuộc tính tiện lợi,
CombinedLoadStates.refresh
,CombinedLoadStates.prepend
,CombinedLoadStates.append
để chỉ chuyển đổi từLoading
sangNotLoading
sau khi cả trạng thái dàn xếp và trạng thái tải nguồn đều làNotLoading
để đảm bảo đã áp dụng bản cập nhật từ xa. (I65619)
Phiên bản 1.0.0-alpha03
Ngày 2 tháng 12 năm 2020
Phát hành androidx.paging:paging-compose:1.0.0-alpha03
. Phiên bản 1.0.0-alpha03 bao gồm các thay đổi sau.
- Cập nhật để khớp với Compose 1.0.0-alpha08.
Phiên bản 1.0.0-alpha02
Ngày 11 tháng 11 năm 2020
Phát hành androidx.paging:paging-compose:1.0.0-alpha02
. Phiên bản 1.0.0-alpha02 bao gồm các thay đổi sau.
Thay đổi về API
- Thêm các phương thức
.peek()
,.snapshot()
,.retry()
và.refresh()
vàoLazyPagingItem
. Việc này hiển thị chức năng tương tự có trongAsyncPagingDataDiffer
/PagingDataAdapter
(Iddfe8, b/172041660)
Phiên bản 1.0.0-alpha01
Ngày 28 tháng 10 năm 2020
Phát hành androidx.paging:paging-compose:1.0.0-alpha01
. Phiên bản 1.0.0-alpha01 bao gồm các thay đổi sau.
Tính năng mới
Cấu phần phần mềm paging-compose
cung cấp tuỳ chọn tích hợp giữa thư viện Paging và Jetpack Compose. Ví dụ về cách sử dụng đơn giản:
@Composable
@OptIn(ExperimentalLazyDsl::class)
fun ItemsDemo(flow: Flow<PagingData<String>>) {
val lazyPagingItems = flow.collectAsLazyPagingItems()
LazyColumn {
items(lazyPagingItems) {
Text("Item is $it")
}
}
}
Phiên bản 3.0.1
Phiên bản 3.0.1
Ngày 21 tháng 7 năm 2021
Phát hành androidx.paging:paging-*:3.0.1
. Phiên bản 3.0.1 bao gồm các thay đổi sau.
Sửa lỗi
- Việc truy cập vào
PagedList.dataSource
từ giá trị ban đầu doLivePagedList
hoặcRxPagedList
tạo ra sẽ không còn gửi nhầm IllegalStateException (I96707) nữa
Phiên bản 3.0.0
Phiên bản 3.0.0
Ngày 5 tháng 5 năm 2021
Phát hành androidx.paging:paging-*:3.0.0
. Phiên bản 3.0.0 bao gồm các thay đổi sau.
Các tính năng chính của Phiên bản 3.0.0
Ngừng sử dụng phần lớn API hiện tại từ Paging 2.x.x và thay bằng API Paging 3 mới để mang đến các cải thiện sau:
- Hỗ trợ hạng nhất cho coroutine và Flow trong Kotlin
- Hỗ trợ huỷ
- Tích hợp trạng thái tải và các tín hiệu lỗi
- Chức năng thử lại + làm mới
- Tất cả ba lớp con của DataSource đã được kết hợp thành một lớp PagingSource thống nhất
- Các lượt chuyển đổi trang tuỳ chỉnh, bao gồm cả lượt tích hợp sẵn để thêm dòng phân cách
- Đầu trang và chân trang trạng thái đang tải
Phiên bản 3.0.0-rc01
Ngày 21 tháng 4 năm 2021
Phát hành androidx.paging:paging-*:3.0.0-rc01
. Phiên bản 3.0.0-rc01 bao gồm các thay đổi sau.
Sửa lỗi
- Sửa lỗi khi Paging đôi khi gửi sự kiện khác không hoạt động đến RecyclerView, có thể khiến một số trình nghe kích hoạt sớm. (Ic507f, b/182510751)
Phiên bản 3.0.0-beta03
Ngày 24 tháng 3 năm 2021
Phát hành androidx.paging:paging-*:3.0.0-beta03
. Phiên bản 3.0.0-beta03 bao gồm các thay đổi sau.
Sửa lỗi
- Chúng tôi đã cải tiến cách xử lý phần giữ chỗ khi bạn tải lại danh sách để ngăn chặn việc chuyển chỗ bất ngờ trong RecyclerView. Hãy xem NullPaddedDiffing.md để biết thông tin chi tiết. (If1490, b/170027529, b/177338149)
- Các trình tạo PagedList khác nhau (đường dẫn tương thích cũ) không còn gọi đồng bộ nhầm
DataSource.Factory.create()
trên luồng Chính khi.build()
được gọi nữa. (b/182798948)
Phiên bản 3.0.0-beta02
Ngày 10 tháng 3 năm 2021
Phát hành androidx.paging:paging-*:3.0.0-beta02
. Phiên bản 3.0.0-beta02 bao gồm các thay đổi sau.
Thay đổi về API
- Giờ đây, các phần mở rộng Rx3 sẽ truyền chính xác
@ExperimentalCoroutinesApi
yêu cầu chọn tham gia. Trước đây, chúng được đánh dấu trên phương thức@get
, bị trình biên dịch Kotlin bỏ qua do: https://youtrack.jetbrains.com/issue/KT-45227 (I5733c)
Sửa lỗi
- Thực thi các hạn chế sử dụng công khai API thử nghiệm (I6aa29, b/174531520)
- Sửa lỗi khiến
PagingState
luôn lànull
khi tính năng làm mới từ xa được gọi. - Sửa lỗi các trang trống bị PagingSource trả về có thể khiến Paging không tìm nạp lại được để thực hiện
prefetchDistance
khiến cho Paging bị "nghẽn".
Phiên bản 3.0.0-beta01
Ngày 10 tháng 2 năm 2021
Phát hành androidx.paging:paging-*:3.0.0-beta01
. Phiên bản 3.0.0-beta01 bao gồm các thay đổi sau.
Thay đổi về API
- Giờ đây, trình bao bọc Rx2 và Rx3 sẽ hiển thị chú thích mang tính thử nghiệm mà nó
phụ thuộc. Nếu bạn đang dùng trình bao bọc khả năng tương thích Rx trong paging-rxjava2 or
paging-rxjava3, thì giờ đây, bạn cần chú thích các cách sử dụng bằng
@OptIn(ExperimentalCoroutinesApi::class)
(Ib1f9d)
Sửa lỗi
- Đôi khi,
IndexOutOfBoundsException: Inconsistency detected
cố định được gửi khi sử dụng API v2DataSource
thông qua đường dẫn tương thích - Lệnh gọi
isInvalid
trong quá trình khởi độngDataSource
khi dùng qua các đường dẫn tương thích hiện đã khởi chạy chính xác trên fetchDispatcher thay vì trên luồng chính. Thao tác này sẽ sửaIllegalStateException
do quyền truy cập Db vào luồng chính khi dùng cách triển khaiPagingSource
của Room.
Phiên bản 3.0.0-alpha13
Ngày 27 tháng 1 năm 2021
Phát hành androidx.paging:paging-*:3.0.0-alpha13
. Phiên bản 3.0.0-alpha13 bao gồm các thay đổi sau.
Thay đổi về API
PagingSource.getRefreshKey
không còn là tuỳ chọn để triển khai nữa, mà đã trở thành một hàm trừu tượng không cần triển khai mặc định. Người dùng đã di chuyển có thể tiếp tục quay lại phương thức triển khai mặc định, đơn giản là quay lạinull
, nhưnggetRefreshKey()
sẽ có phương thức triển khai thực tế để trả về khoá dựa trên vị trí cuộn hiện tại của người dùng cho phép Paging tiếp tục tải vào giữa khung nhìn quaPagingState.anchorPosition
nếu có thể. (I4339a)- Giờ đây,
InvalidatingPagingSourceFactory
là lớp cuối cùng (Ia3b0a) - Cho phép định cấu hình hành vi của dòng phân cách đầu cuối (đầu trang / chân trang)
với thông số SeparatorType tuỳ chọn bổ sung. Hai
tuỳ chọn bao gồm:
FULLY_COMPLETE
– hành vi hiện tại; đợi cả PagingSource và RemoteMediator để đánh dấu endOfPaginationReached trước khi thêm các dòng phân cách của dòng lệnh. Nếu bạn không sử dụng RemoteMediator, thì loadState từ xa sẽ được bỏ qua. Cách này chủ yếu hữu ích nếu bạn chỉ muốn hiển thị các dòng phân cách mục khi mục đã được tải đầy đủ, bao gồm cả việc tìm nạp nguồn từ xa, chẳng hạn như mạng.SOURCE_COMPLETE
– chỉ đợi PagingSource để đánh dấu endOfPaginationReached ngay cả khi sử dụng RemoteMediator. Điều này cho phép đầu trang và chân trang được trình bày đồng bộ với lượt tải đầu tiên, giúp người dùng không cần phải cuộn để xem các dòng phân cách dòng lệnh. (Ibe993, b/174700218)
Sửa lỗi
- Khắc phục một sự cố rò rỉ bộ nhớ hiếm gặp xảy ra khi PagingSource không còn hợp lệ trước khi PageFetcher thậm chí có thể bắt đầu tải từ đó. (I9606b, b/174625633)
Phiên bản 3.0.0-alpha12
Ngày 13 tháng 1 năm 2021
Phát hành androidx.paging:paging-*:3.0.0-alpha12
. Phiên bản 3.0.0-alpha12 bao gồm các thay đổi sau.
Thay đổi về API
- InvalidatingPagingSourceFactory không còn là lớp trừu tượng nữa vì chưa từng có bất kỳ phương thức trừu tượng nào. (I4a8c4)
- Thêm phương thức nạp chồng (overload) của .cachedIn() chấp nhận ViewModel thay vì Lifecycle hoặc CoroutineScope cho người dùng Java. (I97d81, b/175332619)
- Cho phép phương thức gọi Java sử dụng toán tử biến đổi PagingData
theo cách không đồng bộ, bằng cách chấp nhận một Executor thành các đối số của toán tử biến đổi. Giờ đây, tất cả các toán tử biến đổi -Sync đều đã bị xoá hậu tố -Sync
và người dùng Coroutine của Kotlin sẽ cần phân biệt bằng cách
gọi hàm mở rộng chấp nhận một khối tạm ngưng.
Tất cả các toán tử biến đổi PagingData đã được chuyển sang phần mở rộng
trong lớp PagingDataTransforms tĩnh. Người dùng Java sẽ cần
gọi chúng thông qua trình trợ giúp tĩnh, ví dụ:
PagingDataTransforms.map(pagingData, transform)
Đối với người dùng Kotlin, cú pháp giống nhau nhưng bạn cần nhập hàm. (If6885, b/172895919)
Sửa lỗi
- Sửa lỗi khi
RemoteMediator.load()
không được gọi trongadapter.refresh()
nếu đã đạt đến quá trình phân trang.
Phiên bản 3.0.0-alpha11
Ngày 16 tháng 12 năm 2020
Phát hành androidx.paging:paging-*:3.0.0-alpha11
. Phiên bản 3.0.0-alpha11 bao gồm các thay đổi sau.
Tính năng mới
- Hỗ trợ trạng thái đã lưu được thêm cho các trường hợp sử dụng cơ bản sau (hỗ trợ đầy đủ, đặc biệt là trong trường hợp nguồn theo lớp vẫn đang trong quá trình xử lý):
- luồng được lưu vào bộ nhớ đệm và ứng dụng không bị chấm dứt (ví dụ: luồng được lưu vào bộ nhớ đệm trong mô hình chế độ xem và hoạt động được tạo lại trong quá trình này)
- paging source được tính, phần giữ chỗ được cho phép và bố cục không hiển thị xen kẽ.
Thay đổi về API
PagingSource.getRefreshKey()
hiện là API ổn định (I22f6f, b/173530980)PagingSource.invalidate
không còn là một hàm mở. Nếu bạn cần nhận thông báo khi xảy ra trường hợp không hợp lệ, hãy cân nhắc gọi phương thức registerInvalidatedCallback thay vì ghi đè phương thức không hợp lệ. (I628d9, b/173029013, b/137971356)- Giờ đây, Pager có một hàm khởi tạo mang tính thử nghiệm duy nhất cùng với các hàm khởi tạo thông thường, thay vì làm rò rỉ API thử nghiệm vào API công khai không mang tính thử nghiệm thông qua chú thích chọn tham gia. (I9dc61, b/174531520)
- Cập nhật các thuộc tính tiện lợi,
CombinedLoadStates.refresh
,CombinedLoadStates.prepend
,CombinedLoadStates.append
để chỉ chuyển đổi từLoading
sangNotLoading
sau khi cả trạng thái dàn xếp và trạng thái tải nguồn đều làNotLoading
để đảm bảo đã áp dụng bản cập nhật từ xa. (I65619) LoadParams.pageSize đã bị xoá (không còn được dùng nữa). Bạn nên sử dụng
LoadParams.loadSize
trong PagingSource.LoadParams.loadSize
luôn bằngPagingConfig.pageSize
ngoại trừ lệnh gọi lần tải đầu tiên với mã đó bằngPagingConfig.initialLoadSize
.Nếu bạn đang thử nghiệm Paging2 DataSource mà không sử dụng Pager hoặc PagedList, thì
pageSize
có thể không khớp vớiPagingConfig.pageSize
nếu bạn cũng đang cài đặtinitialLoadSize
. Nếu điều này quan trọng đối với thử nghiệm của bạn, hãy thử sử dụng Pager/PagedList để đặt PageSize chính xác nội bộ cho phương thức tải DataSource của bạn. (I98ac7, b/149157296)
Sửa lỗi
- Khắc phục sự cố do IllegalStateException khi sử dụng dòng phân cách với tập hợp PagingConfig.maxSize. (I0ed33, b/174787528)
- Sửa lỗi khi trạng thái tải cho PREPEND / APPEND không
cập nhật thành
NotLoading(endOfPaginationReached = true)
ngay lập tức sau lần tải đầu tiên nếu đã cài đặt RemoteMediator (I8cf5a) - Sửa lỗi khi API presenter-side như .snapshot(), .peek(), v.v. trả về danh sách trước đó (đã lỗi thời) trong bản cập nhật ListUpdateCallback.
- Sửa lỗi khi toán tử dòng phân cách không thêm đầu trang hoặc chân trang khi sử dụng với RemoteMediator
- Sửa lỗi khi các bản cập nhật LoadState thành NotLoading cho RemoteMediator bị kẹt ở trạng thái Loading
- Sửa lỗi khi API tương thích Paging2.0,
.asPagingSourceFactory()
, có thể khiếnDataSource
sao lưu khởi động trên CoroutineDispatcher một cách không chính xác. Điều này giải quyết sự cố và các trường hợp ANR có thể xảy ra, đặc biệt khi sử dụng cách triển khai PagingSource hiện tại của Room, vốn sử dụng đường dẫn tương thích này.
Phiên bản 3.0.0-alpha10
Ngày 2 tháng 12 năm 2020
Phát hành androidx.paging:paging-*:3.0.0-alpha10
. Phiên bản 3.0.0-alpha10 bao gồm các thay đổi sau.
Thay đổi về API
Các API
dataRefreshFlow
vàdataRefreshListener
không dùng nữa đã bị xoá vì không còn cần thiết cho các bản cập nhật loadStateFlow / Listener nữa. Đối với những di chuyển đó, loadStateFlow tương đương là:loadStateFlow.distinctUntilChangedBy { it.refresh } .filter { it.refresh is NotLoading }
Sửa lỗi
- Giờ đây, endOfPaginationReached for RemoteMediator
REFRESH
truyền chính xác đến các bản cập nhật LoadState và ngănAPPEND
vàPREPEND
từ xa kích hoạt. (I94a3f, b/155290248) - Việc hiển thị một danh sách trống do trang ban đầu trống hoặc
quá nhiều hoạt động lọc sẽ không còn ngăn Paging bắt đầu tải
PREPEND
hoặcAPPEND
. (I3e702, b/168169730) - Khắc phục vấn đề không gọi được
getRefreshKey
trên các thế hệ tiếp theo của PagingSource khi các trường hợp không hợp lệ diễn ra nhanh chóng. (I45460, b/170027530)
Đóng góp bên ngoài
- InvalidatingPagingSourceFactory thuộc lớp trừu tượng mới đã được thêm vào
bằng một API
.invalidate()
dùng để chuyển tiếp vô hiệu hoá tất cả PagingSources phát ra. Nhờ có @claraf3! (Ie71fc, b/160716447)
Các lỗi đã biết
- Đầu trang và chân trang từ biến đổi .insertSeparators() có thể không xuất hiện ngay lập tức khi sử dụng RemoteMediator b/172254056
- Việc sử dụng RemoteMediator có thể làm cho
LoadState
từ xa bị gián đoạn nếu điều này không hợp lệ vàPagingSource.load(LoadParams.Refresh(...))
hoàn tất trước khiRemoteMediator.load()
trả về b/173717820
Phiên bản 3.0.0-alpha09
Ngày 11 tháng 11 năm 2020
Phát hành androidx.paging:paging-*:3.0.0-alpha09
. Phiên bản 3.0.0-alpha09 bao gồm các thay đổi sau.
Thay đổi về API
- Hoàn toàn không dùng các phương thức datarefreshFlow / Listener có mệnh đề replaceWith nữa. (I6e2dd)
Sửa lỗi
- Khắc phục lỗi
IllegalArgumentException
bị gửi đi khi sử dụng dòng phân cách với RemoteMediator và chế độ không hợp lệ được kích hoạt trong khi chế độ tải từ xa trả về endOfPagration vẫn đang chạy (I3a260)
Phiên bản 3.0.0-alpha08
Ngày 28 tháng 10 năm 2020
Phát hành androidx.paging:paging-*:3.0.0-alpha08
. Phiên bản 3.0.0-alpha08 bao gồm các thay đổi sau.
Thay đổi về API
- Các biến thể Kotlin / Java của
DataSource.InvalidatedCallback
đã được kết hợp bằng cách bật các lượt chuyển đổi SAM trong Kotlin thông qua giao diện chức năng (có trong Kotlin 1.4). Việc này cũng sửa lỗi biến thể kotlin của các lệnh gọi lại vô hiệu hoá không được gọi sau khi được.map
hoặc.mapByPage
chuyển đổi. (I1f244, b/165313046)
Sửa lỗi
- Hoạt động tương tác của Paging với ViewPager đã được cải thiện đáng kể. Cụ thể là Paging không còn huỷ cuộc gọi
RemoteMediator#load
do việc vô hiệu hoá trang nữa. Bạn cũng sẽ không còn thực hiện yêu cầu tải append/prepend nếu cần phải LÀM MỚI cho đến khi hoàn thành xong yêu cầu LÀM MỚI. (I6390b, b/162252536) - API kiểm tra lỗi mã nguồn dành cho MissingGetterMatchingBuilder được bật đối với androidx (I4bbea, b/138602561)
- Khắc phục lỗi khi trình trợ giúp
.withLoadState*
ConcatAdapter
gặp sự cố do thông báo cho RecyclerView từ luồng trong nền (I18bb5, b/170988309) - Khắc phục lỗi khi quá trình tải một trang không trống, rất nhỏ, đôi khi ngăn việc tìm nạp trước kích hoạt tải đúng cách.Iffda3 b/169259468
Phiên bản 3.0.0-alpha07
Ngày 1 tháng 10 năm 2020
Phát hành androidx.paging:paging-*:3.0.0-alpha07
. Phiên bản 3.0.0-alpha07 bao gồm các thay đổi sau.
Thay đổi về API
- Giờ đây, các toán tử dựa trên Guava của PagingData không đồng bộ sẽ chấp nhận Executor làm Param, để kiểm soát ngữ cảnh thực thi. (Id4372)
Sửa lỗi
- Khắc phục trường hợp ngoại lệ IndexOutOfBounds được gửi trong RemoteMediator do một điều kiện thực hiện. (I00b7f, b/165821814)
- Khắc phục một điều kiện thực hiện trong thao tác chuyển đổi DataSource -> PagingSource có thể khiến PagingSource xuất hiện để bỏ qua các tín hiệu không hợp lệ từ DataSource.
- Khắc phục vấn đề về logic tìm nạp trong trang đôi khi khiến logic này không thể nhận các thế hệ PagingSource mới cho đến khi hệ thống gọi PagingDataAdapter.refresh()
- Khắc phục vấn đề khiến vị trí cuộn đôi khi biến mất khi sử dụng DataSource chuyển đổi thành PagingSource (chẳng hạn như dữ liệu do Room tạo ra), kết hợp với RemoteMediator
Đóng góp bên ngoài
- Nhờ có @simonschiller đã thêm các toán tử biến đổi không đồng bộ dựa trên RxJava2, RxJava3 và Guava cho PagingData!
Phiên bản 3.0.0-alpha06
Ngày 2 tháng 9 năm 2020
Phát hành androidx.paging:paging-*:3.0.0-alpha06
. Phiên bản 3.0.0-alpha06 bao gồm các thay đổi sau.
Thay đổi về API
- Giờ đây,
UnsupportedOperationException
với thông điệp rõ ràng hơn về việc không hỗ trợ cho mã ổn định sẽ được gửi bất cứ khi nàoPagingDataAdapter.setHasStableIds
được gọi. (Ib3890, b/158801427)
Sửa lỗi
- insertSeparators không còn lọc ra các trang trống cho phép công cụ trình bày chấp nhận khoảng cách tìm nạp trước ngay cả trong trường hợp có nhiều trang trống được chèn vào. (I9cff6, b/162538908)
Phiên bản 3.0.0-alpha05
Ngày 19 tháng 8 năm 2020
Phát hành androidx.paging:paging-*:3.0.0-alpha05
. Phiên bản 3.0.0-alpha05 bao gồm các thay đổi sau.
Sửa lỗi
- Giờ đây, Page sẽ tìm nạp trước chính xác các trang ngay cả khi dữ liệu đã trình bày bị lọc quá nhiều
- Hoạt động trả về
LoadResult.Error
vào một thử nghiệm tải lại không còn làm cho các lượt truy cập vào mục kích hoạt lại sự kiện một cách không chính xác
Đóng góp bên ngoài
- Nhờ có Clara F đã giúp xoá bớt một số thử nghiệm! (549612)
Phiên bản 3.0.0-alpha04
Ngày 5 tháng 8 năm 2020
Phát hành androidx.paging:paging-*:3.0.0-alpha04
. Phiên bản 3.0.0-alpha04 bao gồm các thay đổi sau.
Thay đổi về API
- Thêm API
peek()
vàoAsyncPagingDataDiffer
vàPagingDataAdapter
để cho phép truy cập vào dữ liệu được trình bày mà không cần kích hoạt tải trang. (I38898, b/159104197) - Thêm API
snapshot()
vàoPagingDataAdapter
vàAsyncPagingDataDiffer
để cho phép truy xuất các mục được trình bày mà không cần kích hoạt tìm nạp trang. (I566b6, b/159104197) - Thêm một hàm khởi tạo
PagingData.from(List<T>)
để cho phép hiển thị các danh sách tĩnh (có thể kết hợp với quy trình PagingData tổng thể) để hiển thị các danh sách tĩnh ở một số trạng thái nhất định, ví dụ: trước khi quy trình LÀM MỚI ban đầu kết thúc hoặc chỉ đơn giản là để thử nghiệm các biến đổi. (Id134d) - Không dùng các API dataRefresh Flow / Listener nữa vì các API này được thiết kế để hiển thị trạng thái các mục được trình bày trên REFRESH, nhưng với các cải tiến về thời gian gọi lại loadState Flow / Listener và thuộc tính itemCount, API này là một giao diện thừa (Ia19f3)
- Thêm trình bao bọc tương thích RxJava3 cho
PagingSource
vàRemoteMediator
(I49ef3, b/161480176)
Sửa lỗi
PositionalDataSource
được chuyển đổi thànhPagingSource
thông qua trình trợ giúptoPagingSourceFactory
, bao gồm cảPagingSource
do Room tạo ra hiện đã tự đánh dấu chính xác để hỗ trợ việc chuyển đổi. (I3e84c, b/162161201)- Khắc phục lỗi khi việc sử dụng biến thể đồng bộ của submitData
đôi khi sẽ dẫn đến việc thực hiện gây ra
ClosedSendChannelException
(I4d702, b/160192222)
Đóng góp bên ngoài
- Cảm ơn Zac Sweers đã thay mặt cho Slack thêm trình bao bọc khả năng tương thích với RxJava3! (I49ef3, b/161480176)
Phiên bản 3.0.0-alpha03
Ngày 22 tháng 7 năm 2020
Phát hành androidx.paging:paging-*:3.0.0-alpha03
. Phiên bản 3.0.0-alpha03 bao gồm các thay đổi sau.
Thay đổi về API
- Giờ đây, hàm khởi tạo cho PagingState ở chế độ công khai. Điều này sẽ giúp việc triển khai getRefreshKey() thử nghiệm trở nên dễ dàng hơn (I8bf15)
- Ẩn các biến thể hàm bản đồ kotlin của DataSource từ Java, để giải quyết sự không rõ ràng giữa các biến thể gốc và kotlin. (If7b23, b/161150011)
- Để tiện lợi cho người dùng Kotlin, chúng tôi đã đánh dấu các API thừa là @JvmSAggregate (I56ae5)
- Thêm các phương thức nạp chồng cho hàm khởi tạo của LoadResult.Page mặc định itemsBefore và itemsAfter là COUNT_UNDEFINED (I47849)
- Các toán tử PagingData hiện có sẽ chấp nhận các phương thức tạm ngưng và giới thiệu các toán tử mới mapSync, flatMapSync và filterSync không tạm ngưng cho người dùng Java. Các phương thức biến đổi hiện có đã được chuyển sang các hàm mở rộng, vì vậy, người dùng Kotlin sẽ cần nhập các phương thức đó. (I34239, b/159983232)
Sửa lỗi
- PagingSources của Room (và PositionalDataSource) hiện sẽ hiển thị một dòng phân cách ở đầu trang để người dùng không cần phải cuộn để hiển thị thông tin. (I6f747, b/160257628)
- Giờ đây, các lượt truy cập vào mục trên phần giữ chỗ sẽ kích hoạt tính năng PagingSource một cách chính xác cho đến khi một trang được trả về đáp ứng chỉ mục đã yêu cầu sau khi được biến đổi bằng PagingData.filter() (I95625, b/158763195)
- Sửa lỗi khi thao tác cuộn sau PagingSource trả về lỗi có thể ngăn PagingDataAdapter.retry() khỏi hoạt động thử lại. (I1084f, b/160194384)
- Sửa lỗi khi các lượt truy cập vào mục sau khi thả một trang có thể không tải trang mặc dù các lượt truy cập vào mục đó nằm trong prefetchDistance (Ie95ae, b/160038730)
- Thao tác đặt PagingConfig.maxSize không còn cho phép phần giữ chỗ sau một sự kiện thả xuống (I2be29, b/159667766)
Phiên bản 3.0.0-alpha02
Ngày 24 tháng 6 năm 2020
Phát hành androidx.paging:paging-*:3.0.0-alpha02
. Phiên bản 3.0.0-alpha02 bao gồm các thay đổi sau.
Thay đổi về API
- Thêm các phương thức nạp chồng cho hàm khởi tạo của
PagingConfig
với các giá trị mặc định phổ biến (I39c50, b/158576040) - Thêm các phương thức nạp chồng cho hàm khởi tạo của
PagingDataAdapter
vàAsyncPagingDataDiffer
với các giá trị mặc định phổ biến (Ie91f5) - Giờ đây, API của trình chuyển đổi,
dataRefreshFlow
vàdataRefreshListener
chuyển qua Boolean để báo hiệu liệuPagingData
có trống hay không (I6e37e, b/159054196) - Thêm các API RxJava và Guava cho RemoteMediator - RxRemoteMediator và ListenableFutureRemoteMediator
- Thêm trình trợ giúp vào PagingState để truy cập các mục phổ biến như
isEmpty()
vàfirstItemOrNull()
(I3b5b6, b/158892717)
Sửa lỗi
- Giờ đây, Pager kiểm tra việc sử dụng lại PagingSource trong nhà máy, để ngăn việc vô tình sử dụng lại PagingSource không hợp lệ, dẫn đến lỗi không rõ ràng (I99809, b/158486430)
- Các lỗi từ RemoteMediator REFRESH không còn ngăn PagingSource tải nữa (I38b1b, b/158892717)
- Phiên bản không tạm ngưng của
submitData
không còn gây ra sự cố do thu thập đồng thời trên nhiềuPagingData
khi được gọi sau phiên bản tạm ngưng củasubmitData
. (I26358, b/158048877) - Đã khắc phục trường hợp ngoại lệ "không thể thu thập hai lần từ Pager" có thể xảy ra sau khi thay đổi cấu hình (I58lastModifiedDate, b/158784811)
Phiên bản 3.0.0-alpha01
Ngày 10 tháng 6 năm 2020
Phát hành androidx.paging:paging-*:3.0.0-alpha01
. Phiên bản 3.0.0-alpha01 bao gồm các thay đổi sau.
Thư viện Paging đã cập nhật lên phiên bản 3.0 để hỗ trợ một số tính năng chính mới.
Các tính năng mới của phiên bản 3.0
- Hỗ trợ hạng nhất cho coroutine và Flow trong Kotlin.
- Hỗ trợ tải không đồng bộ bằng các chức năng tạm ngưng của coroutine, RxJava Single hoặc nguyên gốc Guava ListenableFutureids.
- Trạng thái tải tích hợp và các tín hiệu lỗi cho thiết kế giao diện người dùng thích ứng, bao gồm cả chức năng thử lại và làm mới.
- Cải tiến lớp của kho lưu trữ
- Đơn giản hoá giao diện nguồn dữ liệu
- Đơn giản hoá mạng + phân trang cơ sở dữ liệu
- Hỗ trợ huỷ
- Cải tiến lớp bản trình bày
Các lỗi đã biết
- Hiện chưa có Paging 3 javadocs. Tạm thời, hãy sử dụng các hướng dẫn nêu trên hoặc tài liệu về Kotlin. (b/158614050)
Phiên bản 2.1.2
Phiên bản 2.1.2
Ngày 18 tháng 3 năm 2020
Phát hành androidx.paging:paging:2.1.2
. Phiên bản 2.1.2 bao gồm các thay đổi sau so với phiên bản 2.1.0.
Sửa lỗi
- Sửa lỗi cho
IndexOutOfBoundsException
trong một số ít trường hợp khi chuyển đổi một vị trí trong thời gian vô hiệu hoá.
Vấn đề về bản phát hành
Paging phiên bản
2.1.1
được phát hành không chính xác từ một nhánh bị định cấu hình sai, hiển thị chức năng và API được triển khai một phần trong bản phát hành sắp tới.Paging phiên bản
2.1.2
chứa bản sửa lỗi căn giữa tải có trong phiên bản 2.1.1, nhưng lần này đã được chọn chính xác ngay trên bản phát hành 2.1.0. Nên nâng cấp lên bản phát hành này nếu đang dùng phiên bản 2.1.1.
Phiên bản 2.1.1
Phiên bản 2.1.1
Ngày 18 tháng 12 năm 2019
Phát hành androidx.paging:paging-*:2.1.1
. Phiên bản 2.1.1 bao gồm các thay đổi sau.
Sửa lỗi
- Các lần tải đầu tiên liên tiếp từ PositionalDataSources hiện tập trung vào lần truy cập gần đây nhất khi đã tắt phần giữ chỗ
Phiên bản 2.1.0
Phiên bản 2.1.0
Ngày 25 tháng 1 năm 2019
Paging phiên bản 2.1.0
được phát hành mà không có thay đổi nào từ 2.1.0-rc01
.
Phiên bản 2.1.0-rc01
Ngày 6 tháng 12 năm 2018
Paging phiên bản 2.1.0-rc01
được phát hành mà không có thay đổi nào từ 2.1.0-beta01
.
Phiên bản 2.1.0-beta01
Ngày 1 tháng 11 năm 2018
Paging phiên bản 2.1.0-beta01
được phát hành mà không có thay đổi nào từ 2.1.0-alpha01
.
Phiên bản 2.1.0-alpha01
Ngày 12 tháng 10 năm 2018
Paging phiên bản 2.1.0-alpha01
có hai nội dung bổ sung chính – đó là thả trang và thư viện tiện ích KTX của mỗi cấu phần phần mềm, cùng một số thay đổi về API và sửa lỗi khác.
Thay đổi về API
- Thêm
PagedList.Config.Builder.setMaxSize()
để giới hạn số lượng mục được tải trong bộ nhớ. - Thêm
androidx.paging.Config()
làm lựa chọn Kotlin thay thế choPagedList.Config.Builder
- Thêm
androidx.paging.PagedList()
làm lựa chọn Kotlin thay thế choPagedList.Builder
- Thêm
DataSourceFactory.toLiveData()
làm lựa chọn Kotlin thay thế choLivePagedListBuilder
- Thêm
DataSourceFactory.toObservable()
vàtoFlowable()
làm lựa chọn Kotlin thay thế choRxPagedListBuilder
- Thêm
AsyncPagedListDiffer.addPagedListListener()
để nghe khi PagedList được hoán đổi. b/111698609 - Thêm biến thể
PagedListAdapter.onCurrentListChanged()
chuyển danh sách cũ và mới, ngừng sử dụng biến thể trước đó. - Thêm biến thể
PagedListAdapter/AsyncPagedListDiffer.submitList()
có chức năng gọi lại kích hoạt nếu/khi pagedlist hiển thị, sau khi so sánh. Điều này cho phép bạn đồng bộ hoá hoạt động hoán đổi PagedList với các bản cập nhật giao diện người dùng khác. b/73781068 - Thêm
PagedList.getLoadedCount()
để cho bạn biết có bao nhiêu mục trong bộ nhớ. Lưu ý rằng giá trị trả về luôn bằng.size()
nếu phần giữ chỗ bị tắt.
Sửa lỗi
- Khắc phục một ình huống tương tranh khi mở rộng nếu danh sách được sử dụng lại b/111591017
- Hiện tại,
PagedList.loadAround()
sẽ cho raIndexOutOfBoundsException
khi chỉ mục không hợp lệ. Trước đây, nó có thể gặp sự cố trừ trường hợp ngoại lệ không rõ ràng. - Khắc phục trường hợp kích thước tải ban đầu cực nhỏ cùng với dữ liệu không thay đổi sẽ không tải thêm nữa b/113122599
Phiên bản 2.0.0
Phiên bản 2.0.0
Ngày 1 tháng 10 năm 2018
Paging phiên bản 2.0.0
được phát hành với một bản sửa lỗi.
Sửa lỗi
- Khắc phục sự cố có thể xảy ra khi cuộn rất nhanh bằng
PositionalDataSource
và phần giữ chỗ b/114635383.
Phiên bản 2.0.0-beta01
Ngày 2 tháng 7 năm 2018
Sửa lỗi
- Nội dung đã khắc phục sẽ biến mất trong một số trường hợp bổ sung (phần giữ chỗ bị tắt, PositionalDataSource) b/80149146
- (Đã phát hành trong
1.0.1
) Khắc phục các sự cố xảy ra khiPagedListAdapter
vàAsyncPagedListDiffer
không báo hiệu các sự kiện di chuyển. b/110711937
Các phần phụ thuộc trước AndroidX
Đối với các phiên bản trước AndroidX của Paging sau đó, hãy thêm vào các phần phụ thuộc sau:
dependencies {
def paging_version = "1.0.0"
implementation "android.arch.paging:runtime:$paging_version"
// alternatively - without Android dependencies for testing
testImplementation "android.arch.paging:common:$paging_version"
// optional - RxJava support
implementation "android.arch.paging:rxjava2:$paging_version"
}
Phiên bản 1.0.1
Phiên bản 1.0.1
Ngày 26 tháng 6 năm 2018
Paging phiên bản 1.0.1
được phát hành với một bản sửa lỗi trong runtime
. Bạn nên sử dụng 1.0.1
để đảm bảo độ ổn định. Paging RxJava2 1.0.1
cũng được phát hành và giống với 1.0.0-rc1
.
Sửa lỗi
- Khắc phục các sự cố xảy ra khi
PagedListAdapter
vàAsyncPagedListDiffer
không báo hiệu các sự kiện di chuyển. b/110711937
RxJava2 Phiên bản 1.0.0
RxJava2 Phiên bản 1.0.0-rc1
Ngày 16 tháng 5 năm 2018
Paging RxJava2 1.0.0-rc1
đang chuyển sang phát hành đề xuất mà không có thay đổi nào trong phiên bản alpha
ban đầu.
Phiên bản 1.0.0
Phiên bản 1.0.0-rc1
Ngày 19 tháng 4 năm 2018 Bản phát hành dùng thử Paging
Chúng tôi không còn thêm bất kỳ vấn đề nào hay có các tính năng mới được lên lịch cho bản phát hành
Paging 1.0.0
. Vui lòng nâng cấp các dự án của bạn để sử dụng 1.0.0-rc1
, đồng thời giúp chúng tôi tiến hành thử nghiệm thành công để có thể mang lại trải nghiệm đáng tin cậy với phiên bản 1.0.0
.
Không có thay đổi nào trong bản phát hành này, bản phát hành giống với 1.0.0-beta1
.
Phiên bản 1.0.0-beta1
Ngày 5 tháng 4 năm 2018
Paging sẽ ở phiên bản thử nghiệm trong một thời gian ngắn trước khi phát hành bản dùng thử.
Chúng tôi hiện không có kế hoạch thay đổi API cho Paging 1.0
và thanh điều khiển cho các thay đổi API là rất cao.
Hỗ trợ Alpha RxJava2 để Paging được phát hành dưới dạng mô-đun tuỳ chọn riêng (android.arch.paging:rxjava2:1.0.0-alpha1
) và sẽ tạm thời được tạo phiên bản riêng cho đến khi phiên bản này ổn định.
Thư viện mới này cung cấp phiên bản thay thế RxJava2 cho LivePagedListBuilder
, có khả năng tạo
Observable
và Flowable
giây, mất Scheduler
s thay vì Executor
:
Kotlin
val pagedItems = RxPagedListBuilder(myDataSource, /* page size */ 50) .setFetchScheduler(myNetworkScheduler) .buildObservable()
Java
Observable<PagedList<Item>> pagedItems = RxPagedListBuilder(myDataSource, /* page size */ 50) .setFetchScheduler(myNetworkScheduler) .buildObservable();
Tính năng mới
RxPagedListBuilder
được thêm thông qua cấu phần mềmandroid.arch.paging:rxjava2
mới.
Thay đổi về API
Thay đổi về API để làm rõ vai trò của người thi hành trong trình tạo:
Đổi tên
setBackgroundThreadExecutor()
thànhsetFetchExecutor()
(trongPagedList.Builder
vàLivePagedListBuilder
)Đổi tên
setMainThreadExecutor()
thànhsetNotifyExecutor()
(trongPagedList.Builder
).
Sửa thành viên
PagedList.mCallbacks
thành chế độ riêng tư.
Sửa lỗi
LivePagedListBuilder
kích hoạt lượt tảiPagedList
ban đầu trên trình thực thi đã chỉ định, thay vì nhóm chuỗi IO của thành phần Arch.Khắc phục hành vi không hợp lệ trong trình bao bọc
DataSource
nội bộ (dùng để triển khaiDataSource.map
, cũng như tảiPositionalDataSource
tắt phần giữ chỗ) b/77237534
Phiên bản 1.0.0-alpha7
Ngày 21 tháng 3 năm 2018
Paging phiên bản 1.0.0-alpha7
được phát hành cùng với Lifecycles 1.1.1
. Vì việc Paging alpha7 phụ thuộc vào việc di chuyển lớp Function
đã đề cập ở trên, nên bạn cần phải cập nhật phần phụ thuộc lifecycle:runtime
thành android.arch.lifecycle:runtime:1.1.1
.
Theo kế hoạch, Paging alpha7
sẽ là bản phát hành cuối cùng trước khi Paging sang beta.
Thay đổi về API
- Các đối tượng
DataSource.LoadParams
hiện có một hàm khởi tạo công khai và các đối tượngDataSource.LoadCallback
hiện đã mang tính trừu tượng. Thao tác này cho phép gói mộtDataSource
hoặc kiểm tra trực tiếp mộtDataSource
bằng một lệnh gọi lại mô phỏng. b/72600421 - Trình lập bản đồ cho DataSource và DataSource.Factory
map(Function<IN,OUT>)
cho phép bạn biến đổi, gói hoặc trang trí các kết quả doDataSource
tải.mapByPage(<List<IN>,List<OUT>>)
cho phép xử lý hàng loạt theo cách tương tự (ví dụ: khi các mục được tải từ SQL cần truy vấn thêm một cơ sở dữ liệu riêng biệt, có thể được thực hiện dưới dạng hàng loạt).
PagedList#getDataSource()
được thêm dưới dạng một phương thức b/72611341- Tất cả lớp không dùng nữa đã bị xóa khỏi API, bao gồm cả phần còn lại của gói
recyclerview.extensions
vàLivePagedListProvider
. DataSource.Factory
được thay đổi từ giao diện thành một lớp trừu tượng để bật chức năng bản đồ.
Sửa lỗi
- Thay đổi Trình tạo thành phiên bản chính thức. b/70848565
- Việc triển khai Room
DataSource
hiện đã được khắc phục để xử lý các truy vấn có nhiều bảng. Bản sửa lỗi này có trong Room 1.1.0 beta, vui lòng xem ở trên. - Sửa lỗi
BoundaryCallback.onItemAtEndLoaded
không được gọi choPositionalDataSource
khi bật phần giữ chỗ và tổng kích thước là bội số chính xác của kích thước trang.
Phiên bản 1.0.0-alpha5
Ngày 22 tháng 1 năm 2018
Sửa lỗi
- Khắc phục sự cố tải trang khi trình giữ chỗ bị tắt b/70573345
- Ghi nhật ký bổ sung để theo dõi IllegalArgumentException b/70360195 (và việc sửa lỗi phía Room có tính duy đoán)
- Sửa mã mẫu Javadoc b/70411933, b/71467637