Paging

Thư viện Paging giúp bạn dễ dàng tải dữ liệu dần và nhẹ nhàng hơn trong RecyclerView của ứng dụng.

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.5 - - -
paging-compose 3.3.5 - - -
Lần gần nhất cập nhật thư viện này: ngày 11 tháng 12 năm 2024

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.

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 3.3

Phiên bản 3.3.5

Ngày 11 tháng 12 năm 2024

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

Sửa lỗi

  • Khắc phục lỗi RecyclerView gửi IndexOutOfBoundsException khi người dùng cuộn trong khi cập nhật RecyclerView. (Id1f16, b/381024738)

Phiên bản 3.3.4

Ngày 13 tháng 11 năm 2024

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

Sửa lỗi

  • Các kiểm thử đơn vị Android lấy Paging 3.3 trở lên sẽ không còn gửi lỗi như Method isLoggable in android.util.Log not mocked nữa. (Ia9400, b/331684448)

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-commonpaging-testing đã thêm các mục tiêu Kotlin-Multiplatform mới: watchos, tvoslinuxArm64 (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 xây dựng dựa trên API đó như PagingDataAdapter dùng với RecyclerView 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 khi cuộn RecyclerView bằng PagingDataAdapter hoặc AsyncPagingDataDiffer. (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ể tạo trình bày đa nền tảng dựa trên PagingDataPresenter thay vì yêu cầu các API Paging nội bộ hoặc AsyncPagingDataDiffer của paging-runtime.
  • Thêm các phương thức trợ giúp LoadStatesCombinedLoadStates mới trong hasErrorisIdle để kiểm tra xem LoadStates có ở trạng thái Lỗi hay NotLoading hay không. Ngoài ra, chúng tôi cũng thêm một phương thức tiện ích Kotlin awaitNotLoading() mới trên Flow<CombinedLoadStates> để chờ cho đến khi tải đã chuyển sang trạng thái NotLoading hoặc Lỗi.
  • PagingData.empty() hiện điều phối các trạng thái NotLoading theo mặc định, trừ phi LoadStates tuỳ chỉnh được truyền vào hàm khởi tạo của nó. Điều này khác với hành vi hiện tại, trong đó không gửi LoadStates khi gửi đến PagingDataAdapter hoặc gửi trạng thái Tải khi được thu thập dưới dạng LazyPagingItems. Khi được thu thập dưới dạng LazyPagingItems, giờ đây, danh sách 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 của Kotlin Multiplatform

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, phần lớn là nhờ công việc ngược dòng từ dự án multiplatform-paging của CashApp.

  • paging-common đã di chuyển tất cả API Paging 3 sang common và hiện tương thích với jvm và iOS ngoài Android.
  • paging-testing đã chuyển mã sang common và hiện tương thích với jvm và iOS ngoài Android.
  • paging-compose đã di chuyển mã của mình sang common và vận chuyển một cấu phần phần mềm Android, khớp với tính năng hỗ trợ nhiều nền tảng của androidx.compose.
  • paging-runtime, paging-guava, paging-rxjava2paging-rxjava3 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ú giải @MainThread của Chú giải AndroidX cho mã chung. (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

  • Khắc phục 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 của 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ể tạo trình bày đa nền tảng dựa trên PagingDataPresenter thay vì yêu cầu các API Paging nội bộ hoặc AsyncPagingDataDiffer của paging-runtime. (Id1f74, b/315214786)
  • Thêm các phương thức trợ giúp LoadStatesCombinedLoadStates mới để kiểm tra xem LoadStates có ở trạng thái Lỗi hay NotLoading hay không. Đồng thời thêm một API mới chờ trên LoadStateFlow cho đến khi tải đã chuyển sang trạng thái NotLoading hoặc Lỗi. (Id6c67)

Thay đổi về hành vi

  • PagingData.empty() hiện điều phối các trạng thái NotLoading theo mặc định, trừ phi LoadStates tuỳ chỉnh được truyền vào hàm khởi tạo của nó. Điều này khác với hành vi hiện tại, trong đó không gửi LoadStates khi gửi đến PagingDataAdapter hoặc gửi trạng thái Tải khi được thu thập dưới dạng LazyPagingItems. Khi được thu thập dưới dạng LazyPagingItems, giờ đây, danh sách 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 của Kotlin Multiplatform

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, phần lớn là nhờ công việc ngược dòng từ dự án multiplatform-paging của CashApp. Điều này sẽ giúp chúng ta tránh sự khác biệt giữa hai kho lưu trữ và duy trì khả năng tương thích giữa các kho lưu trữ.

  • paging-common đã di chuyển tất cả API Paging 3 sang common và hiện tương thích với jvm và iOS ngoài Android.
  • paging-testing đã chuyển mã sang common và hiện tương thích với jvm và iOS ngoài Android.
  • paging-compose đã di chuyển mã của mình sang common và vận chuyển một cấu phần phần mềm Android, khớp với tính năng hỗ trợ nhiều nền tảng của androidx.compose.
  • paging-runtime, paging-guava, paging-rxjava2paging-rxjava3 sẽ chỉ dành cho Android.

Thay đổi về API

  • Giao diện Logger công khai chỉ dành cho mục đích sử dụng nội bộ đã ngừng hoạt động (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ấu phần phần mềm *-jvm*-android. Đối với các biến thể macOS, iOS và Linux, hãy sử dụng 3.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ử phân trang bị treo khi truyền một Flow được tạo bằng PagingData.from(List)asSnapshot() sẽ không có bất kỳ thông tin nào về thời điểm tải xong (không giống như tình trạng quá tải PagingData.from(List, LoadStates)). Giải pháp này chỉ hoạt động đối với các Flow có thể hoàn thành (ví dụ: flowOf(PagingData.from(...))). Đối với các Flow không thể hoàn thành (ví dụ: MutableStateFlow, hãy sử dụng phương thức nạp chồng PagingData.from cung cấp LoadStates). (I502c3)
  • Paging Compose hiện sử dụng AndroidUiDispatcher.Main nội bộ để đảm bảo 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.

Các thay đổi quan trọng kể từ phiên bản 3.1.0

  • Paging Compose đã đạt được độ ổn định về API và đã được hợp nhất trở lại với phần còn lại của Paging, trong đó phiên bản của Paging Compose 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ói PagingData đó trong MutableStateFlow (ví dụ: MutableStateFlow(PagingData.from(listOf(1, 2, 3)))). Truyền luồng này vào các thành phần kết hợp @Preview dưới dạng trình nhận để collectAsLazyPagingItems() xem trước.
    • Hỗ trợ tất cả bố cục tải lười như LazyVerticalGridHorizontalPager cũng như các thành phần tải lười tuỳ chỉnh từ thư viện Wear và TV. Điều này đã đạt được thông qua các phương thức mở rộng LazyPagingItems cấp thấp hơn mới là itemKeyitemContentType. Các phương thức này giúp bạn triển khai các tham số keycontentType cho các API items tiêu chuẩn đã tồn tại cho LazyColumn, LazyVerticalGrid cũng như các tham số tương đương trong các API như HorizontalPager.
    • Ngừng sử dụng items(lazyPagingItems)itemsIndexed(lazyPagingItems) chỉ hỗ trợ LazyListScope.
  • 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à việc tích hợp riêng ứng dụng với Paging. Ví dụ: bao gồm
    • 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ế.
    • ​​API asPagingSourceFactory để chuyển đổi Flow<List<Value>> hoặc List<Value> tĩnh thành PagingSourceFactory có thể được truyền đến Pager trong kiểm thử
    • Tiện ích Kotlin asSnapshot trên Flow<PagingData<Value>>, giúp chuyển Flow<PagingData<Value>> thành List<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ặc appendScrollWhile để 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.
  • Thêm nhật ký mặc định để hiển thị thông tin gỡ lỗi Paging ở hai cấp: VERBOSEDEBUG. Bạn có thể bật nhật ký thông qua lệnh adb shell setprop log.tag.Paging [DEBUG|VERBOSE]. Điều này áp dụng cho cả tính năng Phân trang bằng thành phần hiển thị hoặc Phân trang bằng Compose.
  • Thêm các hàm dựng cho PagingDataAdapterAsyncPagingDataDiffer chấp nhận CoroutineContext 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 các hàm lambda () -> PagingSource trước đó. Bạn có thể sử dụng nhà máy này để tạo bản sao của Pager.

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 tin cụ thể về 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 được độ ổn định của API. Do đó, phiên bản đã được cập nhật từ 1.0.0-alpha20 để khớp với phiên bản của tất cả các cấu phần phần mềm Paging khác.

Thay đổi về API

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 giao diện API rõ ràng hơn so với các hàm lambda () -> PagingSource hiện có. Bạn có thể sử dụng nhà máy này để tạo bản sao của Pager. (I33165, b/280655188)
  • Thêm API paging-testing mới của List<Value>.asPagingSourceFactory() để nhận PagingSourceFactory 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ên Flow<List<Value>> để kiểm thử với nhiều thế hệ dữ liệu tĩnh. (Id34d1, b/280655188)

Thay đổi về API

  • Tất cả API công khai trong tính năng kiểm thử phân trang hiện được chú thích bằng @VisibleForTesting để đảm bảo các API này chỉ được dùng trong kiểm thử. (I7db6e)
  • API asSnapshot không còn yêu cầu truyền vào CoroutineScope. Giờ đây, lớp này mặc định sử dụng ngữ 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ạo Pager thực (I6185a)
  • Di chuyển việc sử dụng loại lambda () -> PagingSource<Key, Value> của tính năng kiểm thử phân trang sang loại PagingSourceFactory<Key, Value>. (I4a950, b/280655188)

Thay đổi về hành vi

  • Bạn không cần phải sử dụng trình điều phối chính để chạy kiểm thử Paging asSnapshot nữa. Việc đặt giá trị này sẽ không còn ảnh hưởng đến 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ử phân trang của asSnapshot hiện đặt tham số loadOperations thành một lambda trống theo mặc định. Điều này cho phép gọi asSnapshot 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ần tải làm mới ban đầu. (Ied354, b/277233770)

Các điểm cải tiến về tài liệu

  • Cập nhật tài liệu về asPagingSourceFactory() để làm rõ rằng đây là một phương thức mở rộng trên Flow, trả về một 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õ việc cần ghi đè itemsBeforeitemsAfter để hỗ trợ việc nhảy. (Ied354)

Đóng góp bên ngoài

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ức asPagingSourceFactory để tạo pagingSourceFactory từ Flow<List<Value>> được cung cấp cho Trình chuyển trang. Mỗi List<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 đổi PagingData 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ó trong Flow<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ủa Flow<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ên Flow<PagingData<Value>>, giúp chuyển Flow<PagingData<Value>> thành List<Value> trực tiếp. Hàm lambda asSnapshot 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ặc appendScrollWhile 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ức suspend dự kiến sẽ chạy trong runTest. 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 getItempeek trong AsyncPagingDataDifferPagingDataAdapter 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 đến LoadResult.Page.iterator(). Điều này gián tiếp cho phép sử dụng phương thức flatten cho thư viện chuẩn Kotlin khi được cung cấp List<LoadResult.Page>, chẳng hạn như với thuộc tính pages của PagingState được truyền đến phương thức PagingSource.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ặc PagingDataAdapter để 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ụng paging-common:3.2.0-alpha01 với thời gian chạy paging-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 PagingDataAdapterAsyncPagingDataDiffer chấp nhận CoroutineContext thay vì CoroutineDispatcher. (Idc878)
  • Theo mặc định, PagingData.from()PagingData.empty() sẽ không còn ảnh hưởng đến CombinedLoadStates ở phía người trình bày. Quá tải mới cho phép truyền sourceLoadStatesremoteLoadStates 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 đặt LoadStates 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ếu LoadStates 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 được PagingData 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ên initialKey trong trường hợp trả về giá trị null, nhưng một initialKey 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ên LoadState bằng cách xoá các sự kiện LoadState.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>.observableFlow<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 trong LoadType.REFRESH cho cả PagingSourceRemoteMediator
    • LoadStates từ Paging đang chờ các giá trị hợp lệ từ cả PagingSourceRemoteMediator 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ằng Loading để có trạng thái làm mới thay vì đặt lại về trạng thái NotLoading không chính xác trong một số trường hợp.
    • .loadStateFlow.addLoadStateListener trên API của nội dung trình bày không còn gửi thừa CombinedLoadStates ban đầu khiến các trạng thái dàn xếp luôn được đặt thành null
  • 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ê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.
  • 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ới PagingSource 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.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>.observableFlow<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 cho LoadType.REFRESH. Trước đây, endOfPaginationReached có thể là true cho RemoteMediator REFRESH 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.addLoadStateListener trên API trình bày không còn gửi thừa CombinedLoadStates ban đầu khiến các trạng thái dàn xếp luôn được đặt thành null và trạng thái nguồn được đặt thành NotLoading(endOfPaginationReached = false). Điều này có nghĩa là:

    1. 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.
    2. 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 được CombinedLoadStates 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 khi PagingData đượ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ói androidx.paging.rxjava3 để không xung đột với paging-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 PagingData.from(fakeData) và gói PagingData đó trong MutableStateFlow (ví dụ: MutableStateFlow(PagingData.from(listOf(1, 2, 3)))). Bằng cách sử dụng dữ liệu đó làm dữ liệu đầu vào cho @Preview, các lệnh gọi đến collectAsLazyPagingItems() sẽ cung cấp LazyPagingItems có thể xem trước. (I8a78d, b/194544557)

Sửa lỗi

  • Dữ liệu đã lưu vào bộ nhớ đệm từ pager.flow.cachedIn đã được thu thập trong LazyPagingItems hiện sẽ có sẵn ngay sau khi khôi phục trạng thái mà không cần thu thập không đồng bộ. Điều này có nghĩa là dữ liệu trong bộ nhớ đệm sẽ sẵn sàng để hiển thị ngay lập tức sau khi khôi phục trạng thái ban đầu. (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 lười

Trước đây, Paging Compose cung cấp các tiện ích itemsitemsIndexed tuỳ chỉnh 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. Việc giải quyết sự thiếu linh hoạt này là nội dung cập nhật chính của bản phát hành này.

Để hỗ trợ nhiều bố cục lazy hơn, chúng ta cần xây dựng các API ở một lớp khác – thay vì cung cấp API items tuỳ chỉnh cho mỗi bố cục lazy, 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 itemKeyitemContentType. Các API này tập trung vào việc giúp bạn triển khai các tham số keycontentType cho các API items tiêu chuẩn đã có sẵn 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ẽ có dạ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ụ về LazyColumnLazyRow dài thêm vài dòng, nhưng chúng tôi nhận thấy rằng tính nhất quán trên tất cả các bố cục tải lười 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 đã ngừng hoạt động. (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 itemsitemsIndexed trên LazyListScope hiện hỗ trợ tham số contentType, phản ánh khả năng 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ọi collectLazyPagingItems. (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ụng paging-compose:1.0.0-alpha15 với paging-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 PagingDataAdapterAsyncPagingDataDiffer chấp nhận CoroutineContext thay vì CoroutineDispatcher. (Idc878)

Sửa lỗi

  • Giờ đây, LazyPagingItems sẽ đặt loadState ban đầu để làm mới LoadState.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ính LazyPagingItems.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)itemsIndexed(lazyPagingItems) dùng để kết nối Paging với LazyColumn/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ụng lazyPagingItems[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ản 1.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 sang NotLoading 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().refresh() vào LazyPagingItem. Việc này hiển thị chức năng tương tự có trong AsyncPagingDataDiffer / 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 PagingJetpack 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 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.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 v2 DataSource thông qua đường dẫn tương thích
  • Lệnh gọi isInvalid trong quá trình khởi động DataSource 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ửa IllegalStateException do quyền truy cập Db vào luồng chính khi dùng cách triển khai PagingSource 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ại null, nhưng getRefreshKey() 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 qua PagingState.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 trong adapter.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 sang NotLoading 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ằng PagingConfig.pageSize ngoại trừ lệnh gọi lần tải đầu tiên với mã đó bằng PagingConfig.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ới PagingConfig.pageSize nếu bạn cũng đang cài đặt initialLoadSize. 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ến DataSource 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 dataRefreshFlowdataRefreshListener 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 }
    

    (Ib5570, b/173530908)

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ăn APPENDPREPEND 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ặc APPEND. (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 khi RemoteMediator.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ào PagingDataAdapter.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ào AsyncPagingDataDifferPagingDataAdapter để 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ào PagingDataAdapterAsyncPagingDataDiffer để 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 PagingSourceRemoteMediator (I49ef3, b/161480176)

Sửa lỗi

  • PositionalDataSource được chuyển đổi thành PagingSource thông qua trình trợ giúp toPagingSourceFactory, 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 PagingDataAdapterAsyncPagingDataDiffer với các giá trị mặc định phổ biến (Ie91f5)
  • Giờ đây, API của trình chuyển đổi, dataRefreshFlowdataRefreshListener chuyển qua Boolean để báo hiệu liệu PagingData có trống hay không (I6e37e, b/159054196)
  • Thêm các API RxJava và Guava cho RemoteMediator - RxRemoteMediatorListenableFutureRemoteMediator
  • Thêm trình trợ giúp vào PagingState để truy cập các mục phổ biến như isEmpty()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ều PagingData khi được gọi sau phiên bản tạm ngưng của submitData. (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

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ế cho PagedList.Config.Builder
  • Thêm androidx.paging.PagedList() làm lựa chọn Kotlin thay thế cho PagedList.Builder
  • Thêm DataSourceFactory.toLiveData() làm lựa chọn Kotlin thay thế cho LivePagedListBuilder
  • Thêm DataSourceFactory.toObservable()toFlowable() làm lựa chọn Kotlin thay thế cho RxPagedListBuilder
  • 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 ra IndexOutOfBoundsException 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 khi PagedListAdapterAsyncPagedListDiffer 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 PagedListAdapterAsyncPagedListDiffer 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 ObservableFlowable giây, mất Schedulers 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ềm android.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ành setFetchExecutor() (trong PagedList.BuilderLivePagedListBuilder)

    • Đổi tên setMainThreadExecutor() thành setNotifyExecutor() (trong PagedList.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ải PagedList 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 khai DataSource.map, cũng như tải PositionalDataSource 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ượng DataSource.LoadCallback hiện đã mang tính trừu tượng. Thao tác này cho phép gói một DataSource hoặc kiểm tra trực tiếp một DataSource 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ả do DataSource 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.extensionsLivePagedListProvider.
  • 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 cho PositionalDataSource 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