การแบ่งหน้า

Paging Library ช่วยให้คุณโหลดข้อมูลใน RecyclerView ของแอปได้อย่างราบรื่นและค่อยเป็นค่อยไป

ตารางนี้แสดงอาร์ติแฟกต์ทั้งหมดในกลุ่ม androidx.paging

อาร์ติแฟกต์ รุ่นที่เสถียร รุ่นที่อาจได้รับการเผยแพร่ รุ่นเบต้า รุ่นอัลฟ่า
paging-* 3.3.6 - - 3.4.0-alpha01
paging-compose 3.3.6 - - 3.4.0-alpha01
ไลบรารีนี้ได้รับการอัปเดตล่าสุดเมื่อวันที่ 2 กรกฎาคม 2025

การประกาศทรัพยากร Dependency

หากต้องการเพิ่มทรัพยากร Dependency ใน Paging คุณต้องเพิ่มที่เก็บ Maven ของ Google ลงในโปรเจ็กต์ อ่านข้อมูลเพิ่มเติมได้ที่ที่เก็บ Maven ของ Google

เพิ่มการอ้างอิงสำหรับอาร์ติแฟกต์ที่คุณต้องการในไฟล์ build.gradle สำหรับแอปหรือโมดูลของคุณ

Groovy

dependencies {
  def paging_version = "3.3.6"

  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.4.0-alpha01"
}

Kotlin

dependencies {
  val paging_version = "3.3.6"

  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.4.0-alpha01")
}

ดูข้อมูลเกี่ยวกับการใช้ส่วนขยาย Kotlin ได้ที่เอกสารประกอบของ KTX

ดูข้อมูลเพิ่มเติมเกี่ยวกับการพึ่งพาได้ที่เพิ่มการพึ่งพาบิลด์

ความคิดเห็น

ความคิดเห็นของคุณจะช่วยให้ Jetpack ทำงานได้ดียิ่งขึ้น โปรดแจ้งให้เราทราบหากพบปัญหาใหม่หรือมี ไอเดียในการปรับปรุงไลบรารีนี้ โปรดดูปัญหาที่มีอยู่ ในไลบรารีนี้ก่อนสร้างปัญหาใหม่ คุณสามารถโหวตปัญหาที่มีอยู่ได้โดย คลิกปุ่มดาว

สร้างปัญหาใหม่

ดูข้อมูลเพิ่มเติมได้ในเอกสารประกอบของเครื่องมือติดตามปัญหา

เวอร์ชัน 3.4

เวอร์ชัน 3.4.0-alpha01

2 กรกฎาคม 2025

androidx.paging:paging-*:3.4.0-alpha01 ได้รับการเผยแพร่แล้ว เวอร์ชัน 3.4.0-alpha01 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

การแก้ไขข้อบกพร่อง

  • การทดสอบหน่วย Android ที่ดึงข้อมูลใน Paging 3.3 ขึ้นไปจะไม่เกิดข้อผิดพลาดจาก PagingLogger (Ia9400, b/331684448) อีกต่อไป
  • แก้ไขข้อบกพร่องที่ RecyclerView แสดง IndexOutOfBoundsException เมื่อผู้ใช้เลื่อนขณะอัปเดต RecyclerView (Id1f16, b/381024738)
  • แก้ไขข้อบกพร่องที่การแบ่งหน้าไม่สามารถทริกเกอร์การโหลดเพิ่มเติมเมื่อรีเฟรชขณะเลื่อน (I60ca5, b/352586078)
  • แก้ไขปัญหาการขัดข้องเมื่อเลื่อนขณะรีเฟรชรายการการแบ่งหน้า (I8c65a, b/347649763)

เวอร์ชัน 3.3

เวอร์ชัน 3.3.6

12 กุมภาพันธ์ 2025

androidx.paging:paging-*:3.3.6 ได้รับการเผยแพร่แล้ว เวอร์ชัน 3.3.6 มีการเปลี่ยนแปลงเหล่านี้

การแก้ไขข้อบกพร่อง

  • ตอนนี้ระบบจะจัดเก็บสัญญาณรีเฟรชและลองอีกครั้งที่ส่งระหว่างการรีเฟรชครั้งแรก และจะส่งอีกครั้งโดยอัตโนมัติเมื่อ Paging presenter พร้อม

การมีส่วนร่วมภายนอก

  • ขอขอบคุณ Eva ที่ส่งการแก้ไขข้อบกพร่อง (#754)

เวอร์ชัน 3.3.5

11 ธันวาคม 2024

androidx.paging:paging-*:3.3.5 ได้รับการเผยแพร่แล้ว เวอร์ชัน 3.3.5 มีการเปลี่ยนแปลงเหล่านี้

การแก้ไขข้อบกพร่อง

  • แก้ไขข้อบกพร่องที่ RecyclerView แสดง IndexOutOfBoundsException เมื่อผู้ใช้เลื่อนขณะอัปเดต RecyclerView (Id1f16, b/381024738)

เวอร์ชัน 3.3.4

13 พฤศจิกายน 2024

androidx.paging:paging-*:3.3.4 ได้รับการเผยแพร่แล้ว เวอร์ชัน 3.3.4 มีการเปลี่ยนแปลงเหล่านี้

การแก้ไขข้อบกพร่อง

  • การทดสอบหน่วย Android ที่ดึงข้อมูลใน Paging 3.3 ขึ้นไปจะไม่แสดงข้อผิดพลาด เช่น Method isLoggable in android.util.Log not mocked อีกต่อไป (Ia9400, b/331684448)

เวอร์ชัน 3.3.2

7 สิงหาคม 2024

androidx.paging:paging-*:3.3.2 ได้รับการเผยแพร่แล้ว เวอร์ชัน 3.3.2 มีการเปลี่ยนแปลงเหล่านี้

ฟีเจอร์ใหม่

  • paging-common และ paging-testing ได้เพิ่มเป้าหมายใหม่แบบหลายแพลตฟอร์มของ Kotlin ได้แก่ watchos, tvos และ linuxArm64 (90c9768), (53e0eca)

เวอร์ชัน 3.3.1

24 กรกฎาคม 2024

androidx.paging:paging-*:3.3.1 ได้รับการเผยแพร่แล้ว เวอร์ชัน 3.3.1 มีการคอมมิตเหล่านี้

การแก้ไขข้อบกพร่อง

  • แก้ไขปัญหาที่ AsyncPagingDataDiffer หรือ API ที่สร้างขึ้นบน AsyncPagingDataDiffer เช่น PagingDataAdapter ที่ใช้กับ RecyclerView จะไม่สามารถทริกเกอร์การโหลดเพิ่มเติมเมื่อแหล่งข้อมูลสำรองรีเฟรชขณะเลื่อน (I60ca5, b/352586078)
  • แก้ไขข้อขัดข้องที่เกิดขึ้นเมื่อนำรายการออกจากแหล่งข้อมูลสำรองขณะเลื่อน RecyclerView โดยใช้ PagingDataAdapter หรือ AsyncPagingDataDiffer (I8c65a, b/347649763)

เวอร์ชัน 3.3.0

14 พฤษภาคม 2024

androidx.paging:paging-*:3.3.0 ได้รับการเผยแพร่แล้ว เวอร์ชัน 3.3.0 มีการเปลี่ยนแปลงเหล่านี้

การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 3.2.0

  • ตอนนี้ PagingDataPresenter เป็นชั้นเรียนสาธารณะแล้ว ตอนนี้คุณสร้างพรีเซนเตอร์แบบหลายแพลตฟอร์มบน PagingDataPresenter ได้แล้ว โดยไม่ต้องใช้ Paging API ภายในหรือ paging-runtime ของ AsyncPagingDataDiffer
  • เพิ่มเมธอดตัวช่วย LoadStates และ CombinedLoadStates ใหม่ใน hasError และ isIdle เพื่อตรวจสอบว่า LoadStates อยู่ในสถานะข้อผิดพลาดหรือสถานะ NotLoading ตามลำดับ นอกจากนี้ ยังได้เพิ่มawaitNotLoading()เมธอดส่วนขยาย Kotlin ใหม่ใน Flow<CombinedLoadStates> ซึ่งจะรอจนกว่าการโหลดจะเข้าสู่สถานะ NotLoading หรือสถานะข้อผิดพลาด
  • PagingData.empty() จะส่งสถานะ NotLoading โดยค่าเริ่มต้น เว้นแต่จะมีการส่ง LoadStates ที่กำหนดเองไปยังเครื่องมือสร้าง ซึ่งแตกต่างจากลักษณะการทำงานที่มีอยู่ซึ่งจะไม่ส่ง LoadStates เมื่อส่งไปยัง PagingDataAdapter หรือจะส่งสถานะการโหลดเมื่อรวบรวมเป็น LazyPagingItems เมื่อรวบรวมเป็น LazyPagingItems ตอนนี้ระบบจะแสดงรายการที่ว่างเปล่าทันทีเมื่อมีการเขียนครั้งแรก

ความเข้ากันได้ของ Kotlin Multiplatform

ตอนนี้ Paging ได้จัดส่งอาร์ติแฟกต์ที่ใช้ได้กับ Kotlin Multiplatform แล้ว ซึ่งส่วนใหญ่เป็นผลงานที่อัปสตรีมจากโปรเจ็กต์ multiplatform-paging ของ CashApp

  • paging-common ได้ย้าย Paging 3 API ทั้งหมดไปที่ common และตอนนี้เข้ากันได้กับ jvm และ iOS นอกเหนือจาก Android
  • paging-testing ได้ย้ายโค้ดไปยัง common และตอนนี้ใช้งานร่วมกับ jvm และ iOS ได้แล้ว นอกเหนือจาก Android
  • paging-compose ได้ย้ายโค้ดไปยัง common และจัดส่งอาร์ติแฟกต์ Android ซึ่งตรงกับการรองรับหลายแพลตฟอร์มของ androidx.compose
  • paging-runtime, paging-guava, paging-rxjava2 และ paging-rxjava3 จะยังคงใช้ได้ใน Android เท่านั้น

เวอร์ชัน 3.3.0-rc01

1 พฤษภาคม 2024

androidx.paging:paging-*:3.3.0-rc01 จะเปิดตัวโดยไม่มีการเปลี่ยนแปลงใน Paging 3.3.0-beta01 เวอร์ชัน 3.3.0-rc01 มีการคอมมิตเหล่านี้

เวอร์ชัน 3.3.0-beta01

3 เมษายน 2024

androidx.paging:paging-*:3.3.0-beta01 เปิดตัวโดยไม่มีการเปลี่ยนแปลงที่สำคัญ เวอร์ชัน 3.3.0-beta01 มีการเปลี่ยนแปลงเหล่านี้

เวอร์ชัน 3.3.0-alpha05

20 มีนาคม 2024

androidx.paging:paging-*:3.3.0-alpha05 ได้รับการเผยแพร่แล้ว เวอร์ชัน 3.3.0-alpha05 มีการเปลี่ยนแปลงเหล่านี้

การเปลี่ยนแปลง API

  • ตอนนี้การแบ่งหน้าใช้คำอธิบายประกอบ @MainThread AndroidX Annotation สำหรับโค้ดทั่วไปแล้ว (I78f0d, b/327682438)

เวอร์ชัน 3.3.0-alpha04

6 มีนาคม 2024

androidx.paging:paging-*:3.3.0-alpha04 ได้รับการเผยแพร่แล้ว เวอร์ชัน 3.3.0-alpha04 มีการเปลี่ยนแปลงเหล่านี้

การแก้ไขข้อบกพร่อง

  • แก้ไขข้อผิดพลาดเล็กน้อยในเอกสารประกอบที่เกี่ยวข้องกับการเพิ่มความเข้ากันได้กับ Kotlin Multiplatform (aosp/2950785)

เวอร์ชัน 3.3.0-alpha03

7 กุมภาพันธ์ 2024

androidx.paging:paging-*:3.3.0-alpha03 ได้รับการเผยแพร่แล้ว เวอร์ชัน 3.3.0-alpha03 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • ตอนนี้ PagingDataPresenter เป็นชั้นเรียนสาธารณะแล้ว ตอนนี้คุณสร้างพรีเซนเตอร์แบบหลายแพลตฟอร์มบน PagingDataPresenter ได้แล้ว โดยไม่ต้องใช้ Paging API ภายในหรือ paging-runtime ของ AsyncPagingDataDiffer (Id1f74, b/315214786)
  • เพิ่มเมธอดตัวช่วย LoadStates และ CombinedLoadStates ใหม่เพื่อตรวจสอบว่า LoadStates อยู่ในสถานะข้อผิดพลาดหรือ NotLoading หรือไม่ นอกจากนี้ ยังได้เพิ่ม API ใหม่ที่รอLoadStateFlowจนกว่าการโหลดจะเปลี่ยนเป็นสถานะNotLoadingหรือสถานะข้อผิดพลาด (Id6c67)

การเปลี่ยนแปลงพฤติกรรม

  • PagingData.empty() จะส่งสถานะ NotLoading โดยค่าเริ่มต้น เว้นแต่จะมีการส่ง LoadStates ที่กำหนดเองไปยังเครื่องมือสร้าง ซึ่งแตกต่างจากลักษณะการทำงานที่มีอยู่ซึ่งจะไม่ส่ง LoadStates เมื่อส่งไปยัง PagingDataAdapter หรือจะส่งสถานะการโหลดเมื่อรวบรวมเป็น LazyPagingItems เมื่อรวบรวมเป็น LazyPagingItems ตอนนี้ระบบจะแสดงรายการที่ว่างเปล่าทันทีเมื่อมีการเขียนครั้งแรก (I4d11d, b/301833847)

เวอร์ชัน 3.3.0-alpha02

20 กันยายน 2023

androidx.paging:paging-*:3.3.0-alpha02 ได้รับการเผยแพร่แล้ว เวอร์ชัน 3.3.0-alpha02 มีคอมมิตเหล่านี้

ความเข้ากันได้ของ Kotlin Multiplatform

ตอนนี้ Paging ได้จัดส่งอาร์ติแฟกต์ที่ใช้ได้กับ Kotlin Multiplatform แล้ว ซึ่งส่วนใหญ่เป็นผลงานที่อัปสตรีมจากโปรเจ็กต์ multiplatform-paging ของ CashApp ซึ่งจะช่วยให้เราหลีกเลี่ยงความแตกต่างระหว่างที่เก็บ 2 แห่งและทำให้ที่เก็บทั้ง 2 เข้ากันได้

  • paging-common ได้ย้าย Paging 3 API ทั้งหมดไปที่ common และตอนนี้เข้ากันได้กับ jvm และ iOS นอกเหนือจาก Android
  • paging-testing ได้ย้ายโค้ดไปยัง common และตอนนี้ใช้งานร่วมกับ jvm และ iOS ได้แล้ว นอกเหนือจาก Android
  • paging-compose ได้ย้ายโค้ดไปยัง common และจัดส่งอาร์ติแฟกต์ Android ซึ่งตรงกับการรองรับหลายแพลตฟอร์มของ androidx.compose
  • paging-runtime, paging-guava, paging-rxjava2 และ paging-rxjava3 จะยังคงใช้ได้ใน Android เท่านั้น

การเปลี่ยนแปลง API

  • อินเทอร์เฟซ Logger สาธารณะที่มีไว้สำหรับการใช้งานภายในเท่านั้นถูกเลิกใช้งานแล้ว (I16e95, b/288623117)

การมีส่วนร่วมภายนอก

เวอร์ชัน 3.3.0-alpha01

20 กันยายน 2023

  • นี่คือการเปิดตัวไลบรารี androidx.paging เป็นครั้งแรกในหลายแพลตฟอร์ม เวอร์ชันนี้มีเฉพาะอาร์ติแฟกต์ *-jvm และ *-android สำหรับตัวแปร macOS, iOS และ Linux ให้ใช้ 3.3.0-alpha02

เวอร์ชัน 3.2

เวอร์ชัน 3.2.1

6 กันยายน 2023

androidx.paging:paging-*:3.2.1 ได้รับการเผยแพร่แล้ว เวอร์ชัน 3.2.1 มีคอมมิตเหล่านี้

การแก้ไขข้อบกพร่อง

  • แก้ไขปัญหาที่ asSnapshot() API ของอาร์ติแฟกต์การทดสอบการแบ่งหน้าจะค้างเมื่อส่ง Flow ที่สร้างโดยใช้ PagingData.from(List) เนื่องจาก asSnapshot() จะไม่มีข้อมูลเกี่ยวกับเวลาที่การโหลดเสร็จสิ้น (ต่างจาก PagingData.from(List, LoadStates) ที่โอเวอร์โหลด) วิธีแก้ปัญหานี้ใช้ได้กับโฟลว์ที่ทำเสร็จได้เท่านั้น (เช่น flowOf(PagingData.from(...))) สำหรับโฟลว์ที่ทำเสร็จไม่ได้ (เช่น MutableStateFlow ให้ใช้โอเวอร์โหลด PagingData.from ที่ให้ LoadStates) (I502c3)
  • ตอนนี้ Paging Compose ใช้ AndroidUiDispatcher.Main ภายในเพื่อให้แน่ใจว่าข้อมูลใหม่จะพร้อมใช้งานในเฟรมเดียวกันเมื่อโหลดเสร็จ (Ia55af)

เวอร์ชัน 3.2.0

26 กรกฎาคม 2023

androidx.paging:paging-*:3.2.0 ได้รับการเผยแพร่แล้ว เวอร์ชัน 3.2.0 มีคอมมิตเหล่านี้

การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 3.1.0

  • Paging Compose มีความเสถียรของ API และได้ผสานรวมกลับเข้าไปในส่วนที่เหลือของ Paging แล้ว ซึ่งตอนนี้เวอร์ชันของ Paging Compose จะตรงกับอาร์ติแฟกต์อื่นๆ ทั้งหมดของ Paging การเปลี่ยนแปลงตั้งแต่เวอร์ชัน 3.1.0 มีดังนี้
    • รองรับการแสดงตัวอย่างรายการข้อมูลปลอมโดยการสร้าง PagingData.from(fakeData) และห่อ PagingData นั้นใน MutableStateFlow (เช่น MutableStateFlow(PagingData.from(listOf(1, 2, 3)))) ส่งโฟลว์นี้ไปยัง Composable ของ @Preview เป็นตัวรับสำหรับ collectAsLazyPagingItems() เพื่อแสดงตัวอย่าง
    • รองรับเลย์เอาต์แบบเลื่อนทั้งหมด เช่น LazyVerticalGrid และ HorizontalPager รวมถึงคอมโพเนนต์แบบเลื่อนที่กำหนดเองจากไลบรารี Wear และ TV ซึ่งทำได้ผ่านเมธอดส่วนขยาย LazyPagingItems ระดับล่างใหม่ itemKey และ itemContentType ซึ่งช่วยให้คุณใช้พารามิเตอร์ key และ contentType กับ API มาตรฐาน items ที่มีอยู่แล้วสำหรับ LazyColumn, LazyVerticalGrid รวมถึง API ที่เทียบเท่า เช่น HorizontalPager
    • items(lazyPagingItems) และ itemsIndexed(lazyPagingItems) ซึ่งรองรับเฉพาะ LazyListScope ถูกเลิกใช้งานแล้ว
  • อาร์ติแฟกต์ paging-testing ใหม่ซึ่งมี API ที่ออกแบบมาเพื่อการทดสอบหน่วยของแต่ละเลเยอร์ในแอปและการผสานรวมกับ Paging โดยแยกกัน เช่น
    • TestPager คลาสที่ช่วยให้คุณตรวจสอบลักษณะการทำงานของการติดตั้งใช้งาน PagingSource ที่กำหนดเองได้โดยไม่ขึ้นอยู่กับ Pager และ UI จริง
    • ​​asPagingSourceFactory API เพื่อแปลง Flow<List<Value>> หรือ List<Value> แบบคงที่ให้เป็น PagingSourceFactory ที่ส่งไปยัง Pager ในการทดสอบได้
    • asSnapshot ส่วนขยาย Kotlin ใน Flow<PagingData<Value>> ซึ่งจะแปล Flow<PagingData<Value>> เป็น List<Value> โดยตรง asSnapshot lambda ช่วยให้คุณเลียนแบบ UI ของแอปผ่าน API เช่น scrollTo หรือ appendScrollWhile เพื่อให้คุณยืนยันได้ว่าสแนปชอตของข้อมูลถูกต้อง ณ จุดใดก็ตามในชุดข้อมูลแบบแบ่งหน้า
  • เพิ่มบันทึกเริ่มต้นเพื่อแสดงข้อมูลการแก้ไขข้อบกพร่องของการแบ่งหน้าใน 2 ระดับ ได้แก่ VERBOSE และ DEBUG คุณเปิดใช้บันทึกได้ผ่านคำสั่ง adb shell setprop log.tag.Paging [DEBUG|VERBOSE] ซึ่งใช้ได้กับทั้งการแบ่งหน้าด้วย View หรือการแบ่งหน้าด้วย Compose
  • เพิ่มตัวสร้างสำหรับ PagingDataAdapter และ AsyncPagingDataDiffer ซึ่งยอมรับ CoroutineContext แทน CoroutineDispatcher
  • เพิ่มPagingSourceFactoryอินเทอร์เฟซฟังก์ชันใหม่ที่ให้พื้นผิว API ที่ชัดเจนกว่า Lambda ก่อนหน้า () -> PagingSource คุณใช้ Factory นี้เพื่อสร้างอินสแตนซ์ของ Pager ได้

เวอร์ชัน 3.2.0-rc01

21 มิถุนายน 2023

androidx.paging:paging-*:3.2.0-rc01 ได้รับการเผยแพร่แล้ว เวอร์ชัน 3.2.0-rc01 มีคอมมิตเหล่านี้

การมีส่วนร่วมภายนอก

  • ขอขอบคุณ Veyndan ที่ช่วยให้ Paging ไม่ต้องพึ่งพา Android/JVM อีกต่อไป (#553, #554, #555, #559)

เวอร์ชัน 3.2.0-beta01

7 มิถุนายน 2023

androidx.paging:paging-*:3.2.0-beta01 ได้รับการเผยแพร่แล้ว เวอร์ชัน 3.2.0-beta01 มีคอมมิตต่อไปนี้

Paging Compose

  • Paging Compose ได้บรรลุความเสถียรของ API อย่างเป็นทางการแล้ว ดังนั้น เราจึงอัปเดตเวอร์ชันจาก 1.0.0-alpha20 ให้ตรงกับเวอร์ชันของอาร์ติแฟกต์การแบ่งหน้าอื่นๆ ทั้งหมด

การเปลี่ยนแปลง API

เวอร์ชัน 3.2.0-alpha06

24 พฤษภาคม 2023

androidx.paging:paging-*:3.2.0-alpha06 ได้รับการเผยแพร่แล้ว เวอร์ชัน 3.2.0-alpha06 มีคอมมิตต่อไปนี้

ฟีเจอร์ใหม่

  • เพิ่มPagingSourceFactoryอินเทอร์เฟซฟังก์ชันการทำงานใหม่ที่ให้พื้นผิว API ที่ชัดเจนกว่า () -> PagingSourceLambda ที่มีอยู่ คุณสามารถใช้ Factory นี้เพื่อสร้างอินสแตนซ์ของ Pager (I33165, b/280655188)
  • เพิ่ม paging-testing API ใหม่ของ List<Value>.asPagingSourceFactory() เพื่อรับ PagingSourceFactory ที่โหลดจากรายการข้อมูลที่ไม่เปลี่ยนแปลงเท่านั้น คุณยังคงควรใช้ส่วนขยายที่มีอยู่บน Flow<List<Value>> เพื่อทดสอบกับข้อมูลแบบคงที่หลายรุ่น (Id34d1, b/280655188)

การเปลี่ยนแปลง API

  • ตอนนี้เราได้ใส่คำอธิบายประกอบ @VisibleForTesting ใน API สาธารณะทั้งหมดในการทดสอบการแบ่งหน้าเพื่อให้มั่นใจว่า API เหล่านี้จะใช้ในการทดสอบเท่านั้น (I7db6e)
  • asSnapshot API ไม่จำเป็นต้องส่ง CoroutineScope อีกต่อไป ตอนนี้ค่าเริ่มต้นคือการใช้บริบทที่รับช่วงมาจากขอบเขตระดับบน (Id0a78, b/282240990)
  • จัดเรียงพารามิเตอร์ของตัวสร้าง TestPager ใหม่ให้ตรงกับลำดับของพารามิเตอร์ของตัวสร้าง Pager จริงอย่างเป็นธรรมชาติ (I6185a)
  • การใช้ประเภท Lambda ของการทดสอบการแบ่งหน้าที่ย้ายข้อมูลแล้วจาก () -> PagingSource<Key, Value> เป็น PagingSourceFactory<Key, Value> (I4a950, b/280655188)

การเปลี่ยนแปลงลักษณะการทำงาน

  • ไม่จำเป็นต้องใช้โปรแกรมจัดสรรหลักเพื่อเรียกใช้asSnapshotการทดสอบการเรียกหน้าอีกต่อไป การตั้งค่านี้จะไม่เปลี่ยนแปลงลักษณะการทำงานของการทดสอบอีกต่อไป (Ie56ea)

เวอร์ชัน 3.2.0-alpha05

3 พฤษภาคม 2023

androidx.paging:paging-*:3.2.0-alpha05 ได้รับการเผยแพร่แล้ว เวอร์ชัน 3.2.0-alpha05 มีคอมมิตเหล่านี้

การเปลี่ยนแปลง API

  • ตอนนี้ Paging Testing API ของ asSnapshot จะตั้งค่าเริ่มต้นของพารามิเตอร์ loadOperations เป็น Lambda ว่าง ซึ่งช่วยให้เรียกใช้ asSnapshot ได้โดยไม่ต้องส่งการดำเนินการโหลดใดๆ เพื่อดึงข้อมูลจากการโหลดการรีเฟรชครั้งแรก (Ied354, b/277233770)

การปรับปรุงเอกสารประกอบ

  • อัปเดตเอกสารประกอบเกี่ยวกับ asPagingSourceFactory() เพื่อชี้แจงว่าเป็นวิธีการขยายใน Flow ซึ่งจะแสดงผลโรงงานที่นำกลับมาใช้ใหม่ได้สำหรับการสร้างอินสแตนซ์ PagingSource (I5ff4f, I705b5)
  • อัปเดตเอกสารประกอบเกี่ยวกับLoadResult.Pageตัวสร้างเพื่อชี้แจงความจำเป็นในการลบล้าง itemsBefore และ itemsAfter เพื่อรองรับการข้าม (Ied354)

การมีส่วนร่วมภายนอก

เวอร์ชัน 3.2.0-alpha04

8 กุมภาพันธ์ 2023

androidx.paging:paging-*:3.2.0-alpha04 ได้รับการเผยแพร่แล้ว เวอร์ชัน 3.2.0-alpha04 มีคอมมิตเหล่านี้

การทดสอบการเรียก

  • ตอนนี้อาร์ติแฟกต์ paging-testing มีเมธอด asPagingSourceFactory สำหรับสร้าง pagingSourceFactory จาก Flow<List<Value>> เพื่อส่งไปยัง Pager แล้ว List<Value>> แต่ละรายการที่ปล่อยออกมาจาก Flow จะแสดงถึงการสร้างข้อมูลที่แบ่งหน้า ซึ่งช่วยให้ทดสอบการแบ่งหน้าได้ เช่น PagingData การแปลงโดยการจำลองแหล่งข้อมูลเพื่อให้ Pager รวบรวมข้อมูล (I6f230, b/235528239)
  • เราได้ขยายpaging-testingอาร์ติแฟกต์ด้วย API ใหม่ที่เหมาะสำหรับการยืนยันว่าข้อมูลที่อยู่ใน Flow<PagingData<T>> นั้นถูกต้อง ซึ่งสามารถใช้เพื่อยืนยันเอาต์พุตของ Flow<PagingData<T>> จากเลเยอร์ ViewModel ได้ เป็นต้น

    ซึ่งทำได้ผ่านasSnapshotส่วนขยาย Kotlin ใน Flow<PagingData<Value>> ซึ่งจะแปล Flow<PagingData<Value>> เป็น List<Value> โดยตรง asSnapshot Lambda ช่วยให้คุณจำลอง UI ของแอปผ่าน API เช่น scrollTo หรือ appendScrollWhile ในลักษณะที่ทำซ้ำได้และสอดคล้องกัน เพื่อให้คุณยืนยันได้ว่าสแนปชอตของข้อมูลถูกต้อง ณ จุดใดก็ตามในชุดข้อมูลที่แบ่งหน้า

    // 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 เป็นวิธีการ suspend ที่คาดว่าจะดำเนินการภายใน runTest ดูข้อมูลเพิ่มเติมได้ที่การทดสอบโครูทีน Kotlin ใน Android (I55fd2, I5bd26, I7ce34, I51f4d, I2249f, Id6223, Ic4bab, Ib29b9, Ic1238, I96def, b/235528239)

การเปลี่ยนแปลง API

  • ตอนนี้การเรียก UI ไปยัง getItem และ peek ใน AsyncPagingDataDiffer และ PagingDataAdapter จะมีเครื่องหมายระบุอย่างถูกต้องว่าเรียกได้เฉพาะในเทรดหลักเท่านั้น (I699b6)
  • นำไวลด์การ์ดออกจากประเภททั่วไปที่ใช้โดย TestPager เพื่อให้ใช้ผลลัพธ์ของเมธอดเหล่านั้นในโค้ดที่เขียนด้วยภาษาการเขียนโปรแกรม Java ได้ง่ายขึ้น (I56c42)

เวอร์ชัน 3.2.0-alpha03

24 ตุลาคม 2022

androidx.paging:paging-*:3.2.0-alpha03 ได้รับการเผยแพร่แล้ว เวอร์ชัน 3.2.0-alpha03 มีคอมมิตต่อไปนี้

การทดสอบการเรียก

รุ่นนี้มีอาร์ติแฟกต์ใหม่คือ paging-testing อาร์ติแฟกต์นี้มี API ที่ออกแบบมาเพื่อการทดสอบหน่วยของแต่ละเลเยอร์ในแอปและการผสานรวมกับ Paging โดยแยกกัน

เช่น รุ่นแรกนี้มีTestPagerคลาสPagingSourceที่ช่วยให้คุณตรวจสอบลักษณะการทำงานของการติดตั้งใช้งาน Pager ที่กำหนดเองได้โดยอิสระจาก PagingSource และ UI จริงที่คุณมักจะต้องจำลองการผสานรวมการแบ่งหน้าแบบครบวงจร

TestPager ควรพิจารณาว่าเป็นของปลอม ซึ่งเป็นการทดสอบแบบคู่ที่จำลองการใช้งานจริงของ Pager ในขณะที่ให้พื้นผิว API ที่เรียบง่ายสำหรับการทดสอบ PagingSource API เหล่านี้คือ suspend API และควรเรียกใช้ภายใน runTest ตามที่ระบุไว้ในคู่มือสำหรับการทดสอบโครูทีน Kotlin ใน Android

ตัวอย่างการใช้งาน API เหล่านี้ดูได้ในroom-pagingการทดสอบ ซึ่งได้รับการปรับโครงสร้างใหม่ให้ใช้ TestPager

การเปลี่ยนแปลง API

  • ช่วยให้ทำซ้ำ LoadResult.Page.data ได้อย่างสะดวกตั้งแต่ LoadResult.Page.iterator() ซึ่งจะช่วยให้ใช้เมธอด Kotlin Standard Library flatten ได้โดยอ้อมเมื่อระบุ List<LoadResult.Page> เช่น พร็อพเพอร์ตี้ pages ของ PagingState ที่ส่งไปยังเมธอด PagingSource.getRefreshKey (Ie0718)

เวอร์ชัน 3.2.0-alpha02

10 สิงหาคม 2022

androidx.paging:paging-*:3.2.0-alpha02 ได้รับการเผยแพร่แล้ว เวอร์ชัน 3.2.0-alpha02 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • ตอนนี้การแบ่งหน้าจะให้บันทึกผ่านคลาส AsyncPagingDataDiffer หรือ PagingDataAdapter เพื่อแสดงข้อมูลการแก้ไขข้อบกพร่องที่รวบรวมจาก PagingData
  • คุณเปิดใช้บันทึกได้ผ่านคำสั่ง adb shell adb shell setprop log.tag.Paging [DEBUG|VERBOSE].(b/235527159)

การแก้ไขข้อบกพร่อง

  • แก้ไขข้อผิดพลาดเกี่ยวกับตัวสร้าง PagingDataDiffer ที่ขาดหายไปเมื่อใช้ paging-common:3.2.0-alpha01 กับรันไทม์ paging-runtime:3.1.1 หรือเก่ากว่า (b/235256201)

เวอร์ชัน 3.2.0-alpha01

1 มิถุนายน 2022

androidx.paging:paging-*:3.2.0-alpha01 ได้รับการเผยแพร่แล้ว เวอร์ชัน 3.2.0-alpha01 มีคอมมิตเหล่านี้

การเปลี่ยนแปลง API

  • เพิ่มตัวสร้างสำหรับ PagingDataAdapter และ AsyncPagingDataDiffer ซึ่งยอมรับ CoroutineContext แทน CoroutineDispatcher (Idc878)
  • โดยค่าเริ่มต้น PagingData.from() และ PagingData.empty() จะไม่มีผลกับ CombinedLoadStates ในฝั่งผู้นำเสนออีกต่อไป ระบบได้เพิ่มการโอเวอร์โหลดใหม่ที่อนุญาตให้ส่ง sourceLoadStates และ remoteLoadStates ไปยังตัวสร้างเหล่านี้เพื่อรักษาลักษณะการทำงานที่มีอยู่ในการตั้งค่า LoadStates ให้เป็นเทอร์มินัลอย่างสมบูรณ์ (เช่น NotLoading(endOfPaginationReached = false)) โดยมีตัวเลือกในการรวมสถานะระยะไกลด้วยหากจำเป็น หากไม่ได้ส่ง LoadStates ระบบจะคง CombinedLoadStates ก่อนหน้าไว้ที่ฝั่งผู้นำเสนอเมื่อได้รับ PagingData แบบคงที่ (Ic3ce5, b/205344028)

การแก้ไขข้อบกพร่อง

  • ตอนนี้ระบบจะจัดลำดับความสำคัญของผลลัพธ์ของ PagingSource.getRefreshKey() เหนือ initialKey อย่างถูกต้องในกรณีที่แสดงผลเป็น Null แต่มีการตั้งค่า initialKey ที่ไม่ใช่ Null (Ic9542, b/230391606)

การมีส่วนร่วมภายนอก

  • อัปเดต :compose:ui:ui-test API (updateApi) เนื่องจากการย้ายข้อมูล test-coroutines-lib (I3366d)

เวอร์ชัน 3.1

เวอร์ชัน 3.1.1

9 มีนาคม 2022

androidx.paging:paging-*:3.1.1 ได้รับการเผยแพร่แล้ว เวอร์ชัน 3.1.1 มีคอมมิตเหล่านี้

การแก้ไขข้อบกพร่อง

  • นำเหตุการณ์ LoadState.NotLoading ระดับกลางระหว่างรุ่นที่ .cachedIn() แทรกอย่างไม่ถูกต้องออก การเปลี่ยนแปลงนี้ช่วยให้ตอบสนองต่อLoadStateการเปลี่ยนแปลงได้ง่ายขึ้นมากด้วยการนำเหตุการณ์ LoadState.NotLoading ที่ซ้ำซ้อนออก ซึ่งเหตุการณ์เหล่านี้เกิดขึ้นระหว่างการลองโหลดที่ล้มเหลวซ้ำ เมื่อรีเฟรช หรือระหว่างการล้างข้อมูล

เวอร์ชัน 3.1.0

17 พฤศจิกายน 2021

androidx.paging:paging-*:3.1.0 ได้รับการเผยแพร่แล้ว เวอร์ชัน 3.1.0 มีคอมมิตเหล่านี้

การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 3.0.0

  • Flow<PagingData>.observable และ Flow<PagingData>.flowable API ไม่ใช่เวอร์ชันทดลองอีกต่อไป
  • การเปลี่ยนแปลงลักษณะการทำงานของ LoadState
    • ตอนนี้ endOfPaginationReached จะเป็น false เสมอสำหรับ LoadType.REFRESH ทั้ง PagingSource และ RemoteMediator
    • LoadStates จากการแบ่งหน้าจะรอค่าที่ถูกต้องจากทั้ง PagingSource และ RemoteMediator ก่อนที่จะส่งไปยังสตรีมปลายทาง ตอนนี้ PagingData รุ่นใหม่จะเริ่มต้นด้วย Loading สำหรับสถานะรีเฟรชอย่างถูกต้องเสมอแทนที่จะรีเซ็ตเป็น NotLoading อย่างไม่ถูกต้องในบางกรณี
    • .loadStateFlow และ .addLoadStateListener ใน API ของผู้แสดงจะไม่ส่ง CombinedLoadStates เริ่มต้นที่ตั้งค่าสถานะตัวกลางเป็น null เสมออีกต่อไป
  • การยกเลิกในรุ่นก่อนๆ จะเกิดขึ้นทันทีเมื่อมีการลบล้าง / รุ่นใหม่ คุณไม่จำเป็นต้องใช้ .collectLatest ใน Flow<PagingData> อีกต่อไป แม้ว่าเราจะยังคงแนะนำให้ทำเช่นนั้นก็ตาม
  • PagingSource.LoadResult.Invalid ได้รับการเพิ่มเป็นประเภทการคืนค่าใหม่จาก PagingSource.load ซึ่งทำให้ Paging ทิ้งคำขอโหลดที่รอดำเนินการหรือในอนาคตไปยัง PagingSource นี้และทำให้คำขอดังกล่าวไม่ถูกต้อง ประเภทการคืนค่านี้ออกแบบมาเพื่อจัดการข้อมูลที่อาจไม่ถูกต้องหรือล้าสมัยซึ่งอาจส่งคืนจากฐานข้อมูลหรือเครือข่าย
  • เพิ่ม API ของผู้นำเสนอ .onPagesPresented และ .addOnPagesUpdatedListener ซึ่งทริกเกอร์พร้อมกันเมื่อมีการนำเสนอหน้าต่างๆ ใน UI การอัปเดตหน้าเว็บอาจเกิดขึ้นในสถานการณ์ต่อไปนี้
    • การโหลด PagingData รุ่นใหม่ครั้งแรกเสร็จสมบูรณ์ ไม่ว่ารุ่นใหม่จะมีรายการที่แสดงที่มีการเปลี่ยนแปลงหรือไม่ก็ตาม เช่น รุ่นใหม่ที่โหลดครั้งแรกโดยไม่มีการอัปเดตเนื่องจากรายการเหมือนกันทุกประการจะยังคงทริกเกอร์การเรียกกลับนี้
    • ระบบจะแทรกหน้า แม้ว่าหน้าที่จะแทรกจะไม่มีรายการใหม่ก็ตาม
    • ระบบจะทิ้งหน้าเว็บ แม้ว่าหน้าเว็บที่ทิ้งจะว่างเปล่าก็ตาม

เวอร์ชัน 3.1.0-rc01

3 พฤศจิกายน 2021

androidx.paging:paging-*:3.1.0-rc01 ได้รับการเผยแพร่แล้ว เวอร์ชัน 3.1.0-rc01 มีคอมมิตเหล่านี้

การแก้ไขข้อบกพร่อง

  • แก้ไข Race Condition + Memory Leak ใน .cachedIn() ในกรณีที่ Paging ส่งเหตุการณ์การโหลดหลายรายการไปยังดาวน์สตรีมในขณะที่ไม่มี Observer หรือระหว่างที่ Observer สลับไปใช้ PagingData ใหม่ (Ib682e)

เวอร์ชัน 3.1.0-beta01

13 ตุลาคม 2021

androidx.paging:paging-*:3.1.0-beta01 ได้รับการเผยแพร่แล้ว เวอร์ชัน 3.1.0-beta01 มีคอมมิตเหล่านี้

การแก้ไขข้อบกพร่อง

  • แก้ไขปัญหาที่การเข้าถึงรายการอย่างรวดเร็วหลายครั้งอาจทำให้ระบบไม่พิจารณารายการเหล่านั้นใน prefetchDistance ซึ่งทำให้การโหลดหน้าเว็บหยุดชะงัก ปัญหานี้จะเกิดขึ้นโดยเฉพาะเมื่อมีการวางไอเทมจำนวนมากพร้อมกันในลำดับที่ให้ความสำคัญกับการโหลดตามทิศทางการเลื่อนของผู้ใช้ ตอนนี้การเข้าถึงรายการเหล่านี้จะได้รับการบัฟเฟอร์และจัดลำดับความสำคัญแบบซิงโครนัสเพื่อป้องกันไม่ให้รายการหลุด (aosp/1833273)

เวอร์ชัน 3.1.0-alpha04

29 กันยายน 2021

androidx.paging:paging-*:3.1.0-alpha04 ได้รับการเผยแพร่แล้ว เวอร์ชัน 3.1.0-alpha04 มีคอมมิตเหล่านี้

การเปลี่ยนแปลง API

  • API ของ Flow<PagingData>.observable และ Flow<PagingData>.flowable ไม่ใช่เวอร์ชันทดลองอีกต่อไป (Ie0bdd)

การแก้ไขข้อบกพร่อง

  • สำหรับ LoadStates ตอนนี้ endOfPaginationReached จะเป็น false สำหรับ LoadType.REFRESH เสมอ ก่อนหน้านี้ true endOfPaginationReached REFRESH อาจเป็นจริงสำหรับ RemoteMediator แต่ไม่ใช่สำหรับ PagingSource ตอนนี้ลักษณะการทำงานนี้ได้รวมเข้าด้วยกันเพื่อให้แสดงผลเป็น false เสมอ เนื่องจากไม่สมเหตุสมผลที่ REFRESH จะเป็นเทอร์มินัล และตอนนี้ได้ บันทึกเป็นส่วนหนึ่งของสัญญา API ใน LoadStates แล้ว เมื่อตัดสินใจว่าจะสิ้นสุดการแบ่งหน้าหรือไม่ คุณควรพิจารณาโดยอิงตามทิศทาง APPEND หรือ PREPEND เสมอ (I047b6)
  • ตอนนี้ LoadStates จากการแบ่งหน้าจะรอค่าที่ถูกต้องจากทั้ง PagingSource และ RemoteMediator ก่อนที่จะปล่อยลงมาที่สตรีมระหว่างการสร้าง ซึ่งจะป้องกันไม่ให้ PagingData รุ่นใหม่ส่ง NotLoading ใน CombinedLoadStates.source.refresh หากเป็น Loading อยู่แล้ว ตอนนี้ PagingData รุ่นใหม่จะเริ่มต้นด้วย Loading สำหรับสถานะการรีเฟรชอย่างถูกต้องเสมอ แทนที่จะรีเซ็ตเป็น NotLoading อย่างไม่ถูกต้องในบางกรณี

    การยกเลิกในรุ่นก่อนๆ จะเกิดขึ้นเมื่อมีการลบล้าง/รุ่นใหม่ คุณไม่จำเป็นต้องใช้ .collectLatest ใน Flow<PagingData> อีกต่อไป แต่เรายังคงแนะนำให้ทำเช่นนั้น (I0b2b5, b/177351336, b/195028524)

  • .loadStateFlow และ .addLoadStateListener ใน Presenter API จะไม่ส่ง CombinedLoadStates เริ่มต้นที่ตั้งค่าสถานะตัวกลางเป็น null และตั้งค่าสถานะแหล่งที่มาเป็น NotLoading(endOfPaginationReached = false) ซ้ำอีกต่อไป ซึ่งหมายความว่า

    1. ระบบจะป้อนข้อมูลสถานะตัวกลางเสมอหากคุณใช้ RemoteMediator
    2. การลงทะเบียนเครื่องมือฟัง loadState ใหม่หรือตัวรวบรวมใหม่ใน .loadStateFlow จะไม่ปล่อยค่าปัจจุบันในทันทีอีกต่อไป หากยังไม่ได้รับ CombinedLoadStates จริงจาก PagingData ซึ่งอาจเกิดขึ้นหาก Collector หรือ Listener เริ่มทำงาน ก่อนที่จะส่ง PagingData (I1a748)

เวอร์ชัน 3.1.0-alpha03

21 กรกฎาคม 2021

androidx.paging:paging-*:3.1.0-alpha03 ได้รับการเผยแพร่แล้ว เวอร์ชัน 3.1.0-alpha03 มีคอมมิตเหล่านี้

การเปลี่ยนแปลง API

  • เพิ่มประเภทการคืนค่า LoadResult ของ LoadResult.Invalid ลงใน PagingSource เมื่อ PagingSource.load แสดงผล LoadResult.Invalid การแบ่งหน้าจะทิ้งข้อมูลที่โหลดแล้วและ ทำให้ PagingSource ไม่ถูกต้อง ประเภทการคืนค่านี้ออกแบบมาเพื่อ จัดการข้อมูลที่อาจไม่ถูกต้องหรือล้าสมัยซึ่งอาจส่งคืน จากฐานข้อมูลหรือเครือข่าย

    ตัวอย่างเช่น หากมีการเขียนลงในฐานข้อมูลพื้นฐาน แต่ PagingSource ไม่ทำให้เป็นโมฆะได้ทันเวลา อาจทำให้ได้ผลลัพธ์ที่ไม่สอดคล้องกันหากการใช้งานขึ้นอยู่กับ ความคงที่ของชุดข้อมูลสำรองที่โหลดจาก (เช่น LIMIT OFFSET style db implementations). ในสถานการณ์นี้ เราขอแนะนำให้ตรวจสอบการลบล้างหลังจากโหลดและส่งคืน LoadResult.Invalid ซึ่งจะทำให้ Paging ทิ้งคำขอโหลดที่รอดำเนินการหรือในอนาคตไปยัง PagingSource นี้และลบล้าง

    นอกจากนี้ Paging2 API ยังรองรับการคืนค่าประเภทนี้ด้วย ซึ่งใช้ประโยชน์จาก LivePagedList หรือ RxPagedList เมื่อใช้ PagingSource กับ API ของ PagedList ใน Paging2 ระบบจะยกเลิกการเชื่อมต่อ PagedList ทันที ซึ่งจะหยุดความพยายามในการโหลดข้อมูลใน PagedList นี้เพิ่มเติม และทริกเกอร์การลบล้างใน PagingSource

    LoadResult เป็นคลาสที่ปิดผนึก ซึ่งหมายความว่านี่เป็นการเปลี่ยนแปลงที่เข้ากันไม่ได้กับแหล่งที่มา ดังนั้น Use Case ที่ใช้ผลลัพธ์ PagingSource.load โดยตรงจะต้องจัดการ LoadResult.Invalid ในเวลาคอมไพล์ ตัวอย่างเช่น ผู้ใช้ Kotlin ที่ใช้ประโยชน์จาก exhaustive-when เพื่อตรวจสอบประเภทการคืนค่าจะต้องเพิ่มการตรวจสอบ สำหรับประเภทที่ไม่ถูกต้อง (Id6bd3, b/191806126, b/192013267)

การแก้ไขข้อบกพร่อง

  • ตอนนี้การเรียกกลับการลบล้างที่เพิ่มผ่าน PagingSource.registerInvalidatedCallback หรือ DataSource.addInvalidatedCallback จะทริกเกอร์โดยอัตโนมัติหากมีการลงทะเบียนใน PagingSource / DataSource ที่ไม่ถูกต้องอยู่แล้ว การเปลี่ยนแปลงนี้จะแก้ไข Race Condition ซึ่งทำให้การแบ่งหน้าทิ้งสัญญาณการลบล้าง และค้างเมื่อระบุแหล่งที่มาซึ่งไม่ถูกต้องอยู่แล้วในระหว่างการโหลดครั้งแรก นอกจากนี้ ตอนนี้ระบบจะนำ การเรียกกลับ invalidate ออกอย่างถูกต้องหลังจากที่ทริกเกอร์แล้ว เนื่องจากรับประกันได้ว่าจะมีการเรียกใช้เพียงครั้งเดียวเท่านั้น (I27e69)
  • การส่งค่าเริ่มต้นของตัวยึดตำแหน่ง (InitialPagedList) จากสตรีม PagedList ที่สร้างอินสแตนซ์ใหม่ เช่น LivePagedListBuilder หรือ RxPagedListBuilder จะไม่ล้างข้อมูลที่โหลดไว้ก่อนหน้านี้อีกต่อไป

เวอร์ชัน 3.1.0-alpha02

1 กรกฎาคม 2021

androidx.paging:paging-*:3.1.0-alpha02 ได้รับการเผยแพร่แล้ว เวอร์ชัน 3.1.0-alpha02 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • เพิ่มเครื่องมือฟังเหตุการณ์ onPagesPresented และ API ของ Flow Presenter ซึ่งจะทริกเกอร์ทันทีหลังจากที่อัปเดตหน้าเว็บที่แสดงใน UI

    เนื่องจากการอัปเดตเหล่านี้จะซิงโครไนซ์กับ UI คุณจึงเรียกใช้เมธอดของอแดปเตอร์ เช่น .snapshot, .getItemCount เพื่อตรวจสอบสถานะหลังจากใช้การอัปเดตแล้วได้ โปรดทราบว่าเราปล่อยให้มีการเรียกใช้ .snapshot() อย่างชัดเจนเนื่องจากอาจมีค่าใช้จ่ายสูงหากทำทุกครั้งที่มีการอัปเดต

    การอัปเดตหน้าเว็บอาจเกิดขึ้นในสถานการณ์ต่อไปนี้

    • การโหลด PagingData รุ่นใหม่ครั้งแรกเสร็จสมบูรณ์ ไม่ว่ารุ่นใหม่จะมีรายการที่แสดงที่มีการเปลี่ยนแปลงหรือไม่ก็ตาม เช่น รุ่นใหม่ที่โหลดครั้งแรกเสร็จสมบูรณ์ โดยไม่มีการอัปเดตเนื่องจากรายการเหมือนกันทุกประการจะยังคง ทริกเกอร์การเรียกกลับนี้
    • ระบบจะแทรกหน้า แม้ว่าหน้าแทรกจะไม่มีรายการใหม่ ก็ตาม
    • ระบบจะทิ้งหน้า แม้ว่าหน้าดังกล่าวจะว่างเปล่า (I272c9, b/189999634)

การแก้ไขข้อบกพร่อง

  • การเข้าถึง PagedList.dataSource จากค่าเริ่มต้นที่สร้างโดย LivePagedList หรือ RxPagedList จะไม่ทำให้เกิด IllegalStateException (I96707) อย่างไม่ถูกต้องอีกต่อไป

เวอร์ชัน 3.1.0-alpha01

2 มิถุนายน 2021

androidx.paging:paging-*:3.1.0-alpha01 ได้รับการเผยแพร่แล้ว เวอร์ชัน 3.1.0-alpha01 มีคอมมิตเหล่านี้

การเปลี่ยนแปลง API

  • คลาสที่ paging-rxjava3 จัดหาให้จะอยู่ภายใต้แพ็กเกจ androidx.paging.rxjava3 เพื่อไม่ให้ขัดแย้งกับ paging-rxjava2 (Ifa7f6)

การแก้ไขข้อบกพร่อง

  • แก้ไขปัญหาที่บางครั้งการแบ่งหน้าจะส่งเหตุการณ์ no-op differ ไปยัง RecyclerView ซึ่งอาจทำให้ Listener บางรายการทริกเกอร์ ก่อนเวลา (Ic507f, b/182510751)

การมีส่วนร่วมภายนอก

  • เพิ่ม API ความเข้ากันได้ของ PagedList ที่เลิกใช้งานแล้วลงในอาร์ติแฟกต์ rxjava3 (Id1ce2, b/182497591)

Paging Compose เวอร์ชัน 1.0.0

เวอร์ชัน 1.0.0-alpha20

24 พฤษภาคม 2023

androidx.paging:paging-compose:1.0.0-alpha20 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.0.0-alpha20 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • ตอนนี้ Paging Compose รองรับการแสดงตัวอย่างรายการข้อมูลจำลองโดยการสร้าง PagingData.from(fakeData) และการห่อ PagingData นั้นใน MutableStateFlow (เช่น MutableStateFlow(PagingData.from(listOf(1, 2, 3)))) การใช้ข้อมูลดังกล่าวเป็นอินพุตใน @Preview การเรียกไปยัง collectAsLazyPagingItems() จะแสดง LazyPagingItems ที่ดูตัวอย่างได้ (I8a78d, b/194544557)

การแก้ไขข้อบกพร่อง

  • ตอนนี้ข้อมูลที่แคชจาก pager.flow.cachedIn ซึ่งรวบรวมไว้ใน LazyPagingItems จะพร้อมใช้งานทันทีหลังจากการกู้คืนสถานะโดยไม่ต้องมีการรวบรวมข้อมูลแบบไม่พร้อมกัน ซึ่งหมายความว่าข้อมูลที่แคชไว้จะพร้อมสำหรับการนำเสนอทันทีเมื่อมีการคอมโพสครั้งแรกหลังจากกู้คืนสถานะแล้ว (I97a60, b/177245496)

เวอร์ชัน 1.0.0-alpha19

3 พฤษภาคม 2023

androidx.paging:paging-compose:1.0.0-alpha19 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.0.0-alpha19 มีคอมมิตเหล่านี้

รองรับเลย์เอาต์แบบเลื่อนทั้งหมด

ก่อนหน้านี้ Paging Compose มีส่วนขยาย items และ itemsIndexed ที่กำหนดเองใน LazyListScope ซึ่งหมายความว่าคุณไม่สามารถใช้ Paging Compose กับเลย์เอาต์แบบ Lazy อื่นๆ เช่น LazyVerticalGrid, HorizontalPager หรือคอมโพเนนต์แบบ Lazy ที่กำหนดเองอื่นๆ ที่ไลบรารี Wear และ TV มีให้ การแก้ไขความไม่ยืดหยุ่นนี้เป็นการอัปเดตหลักสำหรับการเปิดตัวนี้

เราจำเป็นต้องสร้าง API ในเลเยอร์อื่นเพื่อรองรับเลย์เอาต์แบบเลื่อนขี้เกียจเพิ่มเติม แทนที่จะให้ items API ที่กำหนดเองสำหรับเลย์เอาต์แบบเลื่อนขี้เกียจแต่ละรายการ ตอนนี้ Paging Compose มีเมธอดส่วนขยายระดับต่ำกว่าเล็กน้อยใน LazyPagingItems ใน itemKey และ itemContentType API เหล่านี้มุ่งเน้นการช่วยคุณใช้พารามิเตอร์ key และ contentType กับ API มาตรฐาน items ที่มีอยู่แล้วสําหรับ LazyColumn, LazyVerticalGrid รวมถึงพารามิเตอร์ที่เทียบเท่าใน API เช่น HorizontalPager (Ifa13b, Ib04f0, b/259385813)

ซึ่งหมายความว่าการรองรับ LazyVerticalGrid จะมีลักษณะดังนี้

// 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)
  }
}

ดูตัวอย่างเพิ่มเติมเกี่ยวกับการใช้ API ใหม่เหล่านี้ได้ที่ตัวอย่างของเรา

แม้ว่าการเปลี่ยนแปลงเหล่านี้จะทำให้ตัวอย่าง LazyColumn และ LazyRow ยาวขึ้น 2-3 บรรทัด แต่เราคิดว่าความสอดคล้องในเลย์เอาต์แบบ Lazy ทั้งหมดเป็นปัจจัยสำคัญสำหรับผู้ที่ใช้ Paging Compose ในอนาคต ด้วยเหตุนี้ เราจึงเลิกใช้งานส่วนขยายที่มีอยู่สำหรับ LazyListScope แล้ว (I0c459, I92c8f, b/276989796)

การเปลี่ยนแปลง API

  • เพื่ออำนวยความสะดวกในการย้ายข้อมูลไปยัง API ใหม่ ฟังก์ชันส่วนขยาย items และ itemsIndexed ใน LazyListScope จึงรองรับพารามิเตอร์ contentType ซึ่งเป็นการจำลองการรองรับใน API ใหม่ (Ib1918, b/255283378)

การอัปเดตการขึ้นต่อกัน

  • Paging Compose ได้อัปเดตการอ้างอิงจาก Compose 1.0.5 เป็น Compose 1.2.1 แล้ว (Ib1918, b/255283378)

เวอร์ชัน 1.0.0-alpha18

8 กุมภาพันธ์ 2023

androidx.paging:paging-compose:1.0.0-alpha18 จะได้รับการเผยแพร่โดยไม่มีการเปลี่ยนแปลง เวอร์ชัน 1.0.0-alpha18 มีคอมมิตเหล่านี้

เวอร์ชัน 1.0.0-alpha17

24 ตุลาคม 2022

androidx.paging:paging-compose:1.0.0-alpha17 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.0.0-alpha17 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • เพิ่มการรองรับ CoroutineContext ที่กำหนดเองเมื่อโทรหา collectLazyPagingItems (I7a574, b/243182795, b/233783862)

เวอร์ชัน 1.0.0-alpha16

10 สิงหาคม 2022

androidx.paging:paging-compose:1.0.0-alpha16 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.0.0-alpha16 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • ตอนนี้ Paging มีบันทึกผ่านคลาส LazyPagingItems เพื่อแสดงข้อมูลการแก้ไขข้อบกพร่องที่รวบรวมจาก PagingData
  • คุณเปิดใช้บันทึกได้ผ่านคำสั่ง adb shell adb shell setprop log.tag.Paging [DEBUG|VERBOSE] ([b/235527159}(https://issuetracker.google.com/issues/235527159))

การแก้ไขข้อบกพร่อง

  • แก้ไขข้อผิดพลาดเกี่ยวกับตัวสร้าง PagingDataDiffer ที่ขาดหายไปเมื่อใช้ paging-compose:1.0.0-alpha15 กับ paging-common:3.1.1 หรือเวอร์ชันที่เก่ากว่า (b/235256201,b/239868768)

เวอร์ชัน 1.0.0-alpha15

1 มิถุนายน 2022

androidx.paging:paging-compose:1.0.0-alpha15 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.0.0-alpha15 มีคอมมิตต่อไปนี้

การเปลี่ยนแปลง API

  • เพิ่มตัวสร้างสำหรับ PagingDataAdapter และ AsyncPagingDataDiffer ซึ่งยอมรับ CoroutineContext แทน CoroutineDispatcher (Idc878)

การแก้ไขข้อบกพร่อง

  • LazyPagingItems จะตั้งค่า loadState เริ่มต้นให้มีการรีเฟรช LoadState.Loading (I55043, b/224855902)

เวอร์ชัน 1.0.0-alpha14

13 ตุลาคม 2021

androidx.paging:paging-compose:1.0.0-alpha14 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.0.0-alpha14 มีคอมมิตต่อไปนี้

เวอร์ชัน 1.0.0-alpha13

29 กันยายน 2021

androidx.paging:paging-compose:1.0.0-alpha13 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.0.0-alpha13 มีคอมมิตต่อไปนี้

การเปลี่ยนแปลง API

  • ฟังก์ชัน LazyPagingItems.snapshot() ถูกแทนที่ด้วยพร็อพเพอร์ตี้ LazyPagingItems.itemSnapshotList (Ie2da8)
  • นำ LazyPagingItems.getAsState() ที่เลิกใช้งานแล้วออก (Ie65e4)

เวอร์ชัน 1.0.0-alpha12

21 กรกฎาคม 2021

androidx.paging:paging-compose:1.0.0-alpha12 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.0.0-alpha12 มีคอมมิตต่อไปนี้

การเปลี่ยนแปลง API

  • items(lazyPagingItems) และ itemsIndexed(lazyPagingItems) ที่ใช้เชื่อมต่อการแบ่งหน้ากับ LazyColumn/Row ตอนนี้ยอมรับพารามิเตอร์คีย์ตัวเลือกแล้ว ซึ่งช่วยให้คุณระบุคีย์ที่เสถียรซึ่งแสดงถึงรายการได้ อ่านเพิ่มเติมเกี่ยวกับคีย์ได้ที่นี่ (I7986d)
  • ตอนนี้ฟังก์ชัน lazyPagingItems.getAsState(index) เลิกใช้งานแล้ว โปรดใช้ lazyPagingItems[index] แทน (I086cb, b/187339372)

เวอร์ชัน 1.0.0-alpha11

30 มิถุนายน 2021

androidx.paging:paging-compose:1.0.0-alpha11 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.0.0-alpha11 มีคอมมิตเหล่านี้

เวอร์ชัน 1.0.0-alpha10

2 มิถุนายน 2021

androidx.paging:paging-compose:1.0.0-alpha10 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.0.0-alpha10 มีคอมมิตเหล่านี้

เวอร์ชัน 1.0.0-alpha09

18 พฤษภาคม 2021

androidx.paging:paging-compose:1.0.0-alpha09 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.0.0-alpha09 มีคอมมิตต่อไปนี้

การแก้ไขข้อบกพร่อง

  • ตอนนี้ itemCount และตัวรับรายการของ LazyPagingItems สามารถสังเกตได้แล้ว ซึ่งทำให้ใช้กับ LazyVerticalGrid ได้ด้วย (Ie2446, b/171872064, b/168285687)

ความเข้ากันได้ของ Compose

  • androidx.paging:paging-compose:1.0.0-alpha09 ใช้ได้กับ Compose เวอร์ชัน 1.0.0-beta07 ขึ้นไปเท่านั้น

เวอร์ชัน 1.0.0-alpha08

24 กุมภาพันธ์ 2021

androidx.paging:paging-compose:1.0.0-alpha08 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.0.0-alpha08 มีคอมมิตต่อไปนี้

อัปเดตเพื่อผสานรวมกับ Compose 1.0.0-beta01

เวอร์ชัน 1.0.0-alpha07

10 กุมภาพันธ์ 2021

androidx.paging:paging-compose:1.0.0-alpha07 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.0.0-alpha07 มีคอมมิตเหล่านี้

อัปเดตเพื่อผสานรวมกับ Compose alpha12

เวอร์ชัน 1.0.0-alpha06

28 มกราคม 2021

androidx.paging:paging-compose:1.0.0-alpha06 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.0.0-alpha06 มีคอมมิตเหล่านี้

การแก้ไขข้อบกพร่อง

อัปเดตให้ขึ้นอยู่กับ Compose 1.0.0-alpha11

เวอร์ชัน 1.0.0-alpha05

13 มกราคม 2021

androidx.paging:paging-compose:1.0.0-alpha05 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.0.0-alpha05 มีคอมมิตต่อไปนี้

อัปเดตให้ขึ้นอยู่กับ Compose 1.0.0-alpha10

เวอร์ชัน 1.0.0-alpha04

16 ธันวาคม 2020

androidx.paging:paging-compose:1.0.0-alpha04 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.0.0-alpha04 มีคอมมิตเหล่านี้

การแก้ไขข้อบกพร่อง

  • อัปเดตพร็อพเพอร์ตี้ความสะดวก CombinedLoadStates.refresh, CombinedLoadStates.prepend CombinedLoadStates.append ให้เปลี่ยนจาก Loading เป็น NotLoading เท่านั้น หลังจากที่ทั้งสถานะการโหลดของสื่อกลางและแหล่งที่มาเป็น NotLoading เพื่อให้แน่ใจว่า การอัปเดตจากระยะไกลมีผลแล้ว (I65619)

เวอร์ชัน 1.0.0-alpha03

2 ธันวาคม 2020

androidx.paging:paging-compose:1.0.0-alpha03 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.0.0-alpha03 มีคอมมิตต่อไปนี้

  • อัปเดตให้ตรงกับ Compose 1.0.0-alpha08

เวอร์ชัน 1.0.0-alpha02

11 พฤศจิกายน 2020

androidx.paging:paging-compose:1.0.0-alpha02 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.0.0-alpha02 มีคอมมิตเหล่านี้

การเปลี่ยนแปลง API

  • เพิ่มเมธอด .peek(), .snapshot(), .retry() และ .refresh() ลงใน LazyPagingItems ซึ่งแสดงฟังก์ชันการทำงานเดียวกันกับที่มีใน AsyncPagingDataDiffer / PagingDataAdapter (Iddfe8, b/172041660)

เวอร์ชัน 1.0.0-alpha01

28 ตุลาคม 2020

androidx.paging:paging-compose:1.0.0-alpha01 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.0.0-alpha01 มีคอมมิตต่อไปนี้

ฟีเจอร์ใหม่

อาร์ติแฟกต์ paging-compose ช่วยผสานรวมระหว่าง Paging Library กับ Jetpack Compose ตัวอย่างการใช้งานอย่างง่าย

  @Composable
  @OptIn(ExperimentalLazyDsl::class)
  fun ItemsDemo(flow: Flow<PagingData<String>>) {
      val lazyPagingItems = flow.collectAsLazyPagingItems()
      LazyColumn {
          items(lazyPagingItems) {
              Text("Item is $it")
          }
      }
  }

เวอร์ชัน 3.0.1

เวอร์ชัน 3.0.1

21 กรกฎาคม 2021

androidx.paging:paging-*:3.0.1 ได้รับการเผยแพร่แล้ว เวอร์ชัน 3.0.1 มีคอมมิตเหล่านี้

การแก้ไขข้อบกพร่อง

  • การเข้าถึง PagedList.dataSource จากค่าเริ่มต้นที่สร้างโดย LivePagedList หรือ RxPagedList จะไม่ทำให้เกิด IllegalStateException (I96707) อย่างไม่ถูกต้องอีกต่อไป

เวอร์ชัน 3.0.0

เวอร์ชัน 3.0.0

5 พฤษภาคม 2021

androidx.paging:paging-*:3.0.0 ได้รับการเผยแพร่แล้ว เวอร์ชัน 3.0.0 มีคอมมิตเหล่านี้

ฟีเจอร์หลักของเวอร์ชัน 3.0.0

API ที่มีอยู่ส่วนใหญ่จาก Paging 2.x.x ถูกเลิกใช้งานแล้วเพื่อรองรับ Paging 3 API ใหม่ที่จะนำการปรับปรุงต่อไปนี้มาให้

  • การรองรับโครูทีนและ Flow ของ Kotlin อย่างเต็มที่
  • การสนับสนุนสำหรับการยกเลิก
  • สัญญาณสถานะการโหลดและข้อผิดพลาดในตัว
  • ฟังก์ชันลองอีกครั้ง + รีเฟรช
  • เราได้รวมคลาสย่อย DataSource ทั้ง 3 คลาสไว้ในคลาส PagingSource เดียว
  • การเปลี่ยนรูปแบบหน้าเว็บที่กำหนดเอง รวมถึงการเปลี่ยนรูปแบบในตัวสำหรับการเพิ่มตัวคั่น
  • ส่วนหัวและส่วนท้ายของสถานะการโหลด

เวอร์ชัน 3.0.0-rc01

21 เมษายน 2021

androidx.paging:paging-*:3.0.0-rc01 ได้รับการเผยแพร่แล้ว เวอร์ชัน 3.0.0-rc01 มีคอมมิตเหล่านี้

การแก้ไขข้อบกพร่อง

  • แก้ไขปัญหาที่บางครั้งการแบ่งหน้าจะส่งเหตุการณ์ no-op differ ไปยัง RecyclerView ซึ่งอาจทำให้ Listener บางรายการทริกเกอร์ ก่อนเวลา (Ic507f, b/182510751)

เวอร์ชัน 3.0.0-beta03

24 มีนาคม 2021

androidx.paging:paging-*:3.0.0-beta03 ได้รับการเผยแพร่แล้ว เวอร์ชัน 3.0.0-beta03 มีคอมมิตเหล่านี้

การแก้ไขข้อบกพร่อง

  • เราได้ปรับปรุงวิธีจัดการตัวยึดตำแหน่งเมื่อโหลดรายการซ้ำเพื่อป้องกันไม่ให้ RecyclerView ข้ามไปอย่างไม่คาดคิด ดูรายละเอียดได้ที่ NullPaddedDiffing.md (If1490, b/170027529, b/177338149)
  • ตัวสร้าง PagedList ต่างๆ (เส้นทางการทำงานร่วมกันแบบเดิม) จะไม่เรียก DataSource.Factory.create() ในเทรดหลักอย่างไม่ถูกต้องพร้อมกันอีกต่อไปเมื่อมีการเรียก .build() (b/182798948)

เวอร์ชัน 3.0.0-beta02

10 มีนาคม 2021

androidx.paging:paging-*:3.0.0-beta02 ได้รับการเผยแพร่แล้ว เวอร์ชัน 3.0.0-beta02 มีคอมมิตเหล่านี้

การเปลี่ยนแปลง API

  • ตอนนี้ส่วนขยาย Rx3 จะเผยแพร่ @ExperimentalCoroutinesApi ข้อกำหนดในการเลือกใช้ได้อย่างถูกต้องแล้ว ก่อนหน้านี้มีการทำเครื่องหมายในเมธอด @get ซึ่งคอมไพเลอร์ Kotlin จะไม่สนใจเนื่องจาก https://youtrack.jetbrains.com/issue/KT-45227 (I5733c)

การแก้ไขข้อบกพร่อง

  • บังคับใช้ข้อจำกัดในการใช้งาน API เวอร์ชันทดลองแบบสาธารณะ (I6aa29, b/174531520)
  • แก้ไขข้อบกพร่องที่ทำให้ PagingState เป็น null เสมอเมื่อมีการเรียกการรีเฟรชจากระยะไกล
  • แก้ไขข้อบกพร่องที่ทำให้หน้าว่างที่ PagingSource แสดงผลอาจป้องกันไม่ให้ Paging ดึงข้อมูลอีกครั้งเพื่อตอบสนอง prefetchDistance ซึ่งทำให้ Paging "ค้าง"

เวอร์ชัน 3.0.0-beta01

10 กุมภาพันธ์ 2021

androidx.paging:paging-*:3.0.0-beta01 ได้รับการเผยแพร่แล้ว เวอร์ชัน 3.0.0-beta01 มีคอมมิตเหล่านี้

การเปลี่ยนแปลง API

  • ตอนนี้ Wrapper Rx2 และ Rx3 จะแสดงคำอธิบายประกอบเวอร์ชันทดลองที่ขึ้นอยู่กับ หากคุณใช้ Wrapper ที่เข้ากันได้กับ Rx ใน paging-rxjava2 หรือ paging-rxjava3 ตอนนี้คุณจะต้องใส่คำอธิบายประกอบการใช้งานด้วย @OptIn(ExperimentalCoroutinesApi::class) (Ib1f9d)

การแก้ไขข้อบกพร่อง

  • แก้ไขข้อผิดพลาด IndexOutOfBoundsException: Inconsistency detected ที่บางครั้งเกิดขึ้นเมื่อใช้ API ของ v2 DataSource ผ่านเส้นทางความเข้ากันได้
  • isInvalid ในระหว่างการเริ่มต้นของ DataSource เมื่อใช้ผ่านเส้นทางความเข้ากันได้จะเปิดใช้ใน fetchDispatcher อย่างถูกต้องแทนที่จะเป็นในเทรดหลัก การแก้ไขนี้จะช่วยแก้ปัญหา IllegalStateException ที่เกิดจากการเข้าถึง Db ในเทรดหลักเมื่อใช้การติดตั้งใช้งาน PagingSource ของ Room

เวอร์ชัน 3.0.0-alpha13

27 มกราคม 2021

androidx.paging:paging-*:3.0.0-alpha13 ได้รับการเผยแพร่แล้ว เวอร์ชัน 3.0.0-alpha13 มีคอมมิตเหล่านี้

การเปลี่ยนแปลง API

  • PagingSource.getRefreshKey ไม่ใช่ตัวเลือกที่ไม่บังคับอีกต่อไป แต่เป็นฟังก์ชันนามธรรมที่ไม่มีการติดตั้งใช้งานเริ่มต้น ผู้ใช้ที่ย้ายข้อมูลสามารถเลือกที่จะใช้การติดตั้งใช้งานเริ่มต้นต่อไปได้ ซึ่งจะแสดงผลเป็น null แต่ getRefreshKey() ควรมีการติดตั้งใช้งานจริงที่แสดงผลคีย์ตามตำแหน่งการเลื่อนปัจจุบันของผู้ใช้ ซึ่งจะช่วยให้การแบ่งหน้าโหลดต่อไปได้ โดยมีวิวพอร์ตเป็นศูนย์กลางผ่าน PagingState.anchorPosition หากเป็นไปได้ (I4339a)
  • ตอนนี้ InvalidatingPagingSourceFactory เป็นคลาสสุดท้ายแล้ว (Ia3b0a)
  • อนุญาตการกำหนดค่าลักษณะการทำงานของตัวคั่นเทอร์มินัล (ส่วนหัว / ส่วนท้าย) ด้วยพารามิเตอร์ SeparatorType เพิ่มเติมที่ไม่บังคับ โดยมี 2 ตัวเลือก ดังนี้
    • FULLY_COMPLETE - ลักษณะการทำงานที่มีอยู่ รอให้ทั้ง PagingSource และ RemoteMediator ทำเครื่องหมาย endOfPaginationReached ก่อนเพิ่มตัวคั่น เทอร์มินัล หากไม่ได้ใช้ RemoteMediator ระบบจะ ละเว้น loadState ระยะไกล ซึ่งจะมีประโยชน์หลักๆ ในกรณีที่คุณต้องการแสดงตัวคั่นส่วน เฉพาะเมื่อส่วนนั้นโหลดเสร็จสมบูรณ์แล้ว รวมถึงการดึงข้อมูลจาก แหล่งที่มาภายนอก เช่น เครือข่าย
    • SOURCE_COMPLETE - รอให้ PagingSource ทำเครื่องหมาย endOfPaginationReached แม้ว่าจะใช้ RemoteMediator ก็ตาม ซึ่งจะช่วยให้แสดงส่วนหัวและส่วนท้ายพร้อมกับการโหลดครั้งแรกได้ ซึ่งจะช่วยให้ผู้ใช้ไม่ต้องเลื่อนเพื่อดูตัวคั่นสุดท้าย (Ibe993, b/174700218)

การแก้ไขข้อบกพร่อง

  • แก้ไขปัญหาหน่วยความจำรั่วที่เกิดขึ้นได้ยาก ซึ่งเกิดขึ้นเมื่อมีการ ล้างค่า PagingSource ก่อนที่ PageFetcher จะเริ่มโหลดจาก PagingSource ได้ (I9606b, b/174625633)

เวอร์ชัน 3.0.0-alpha12

13 มกราคม 2021

androidx.paging:paging-*:3.0.0-alpha12 ได้รับการเผยแพร่แล้ว เวอร์ชัน 3.0.0-alpha12 มีคอมมิตเหล่านี้

การเปลี่ยนแปลง API

  • InvalidatingPagingSourceFactory ไม่ใช่คลาส Abstract อีกต่อไป เนื่องจากไม่มีเมธอด Abstract (I4a8c4)
  • เพิ่มการโอเวอร์โหลดของ .cachedIn() ที่ยอมรับ ViewModel แทน Lifecycle หรือ CoroutineScope สำหรับผู้ใช้ Java (I97d81, b/175332619)
  • อนุญาตให้ผู้เรียกใช้ Java ใช้การดำเนินการเปลี่ยนรูปแบบ PagingData ในลักษณะที่ไม่พร้อมกันโดยการยอมรับ Executor ลงในอาร์กิวเมนต์ของตัวดำเนินการเปลี่ยนรูปแบบ ตอนนี้ระบบได้นำคำต่อท้าย -Sync ออกจากตัวดำเนินการแปลง -Sync ทั้งหมดแล้ว และผู้ใช้ Kotlin Coroutine จะต้องแยกความแตกต่างโดยการเรียกฟังก์ชันส่วนขยายที่ยอมรับบล็อกที่ระงับแทน เราได้ย้ายโอเปอเรเตอร์การเปลี่ยนรูปแบบ PagingData ทั้งหมดไปไว้ในส่วนขยาย ภายใต้คลาส PagingDataTransforms แบบคงที่ ผู้ใช้ Java จะต้อง เรียกใช้ผ่านตัวช่วยแบบคงที่ เช่น PagingDataTransforms.map(pagingData, transform) สำหรับผู้ใช้ Kotlin ไวยากรณ์จะเหมือนกัน แต่คุณจะต้องนำเข้าฟังก์ชัน (If6885, b/172895919)

การแก้ไขข้อบกพร่อง

  • แก้ไขข้อบกพร่องที่ทำให้ไม่มีการเรียกใช้ RemoteMediator.load() ระหว่าง adapter.refresh() หากถึงจุดสิ้นสุดของการแบ่งหน้าแล้ว

เวอร์ชัน 3.0.0-alpha11

16 ธันวาคม 2020

androidx.paging:paging-*:3.0.0-alpha11 ได้รับการเผยแพร่แล้ว เวอร์ชัน 3.0.0-alpha11 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • เพิ่มการรองรับสถานะที่บันทึกไว้สำหรับกรณีการใช้งานพื้นฐานต่อไปนี้ (การรองรับแบบเต็ม โดยเฉพาะในกรณีแหล่งที่มาแบบเลเยอร์ยังอยู่ระหว่างดำเนินการ)
    • แคชโฟลว์และไม่ได้ปิดแอปพลิเคชัน (เช่น แคชโฟลว์ใน ViewModel และกิจกรรมจะสร้างขึ้นใหม่ในกระบวนการ)
    • ระบบจะนับแหล่งที่มาของการแบ่งหน้า เปิดใช้ตัวยึดตำแหน่ง และเลย์เอาต์ ไม่เหลื่อมกัน

การเปลี่ยนแปลง API

  • PagingSource.getRefreshKey() ตอนนี้เป็น API ที่เสถียรแล้ว (I22f6f, b/173530980)
  • PagingSource.invalidate ไม่ใช่ฟังก์ชันที่เปิดให้ใช้งานอีกต่อไป หากต้องการรับการแจ้งเตือนเมื่อมีการลบล้าง ให้พิจารณาเรียกใช้เมธอด registerInvalidatedCallback แทนการลบล้าง invalidate (I628d9, b/173029013, b/137971356)
  • ตอนนี้ Pager มีตัวสร้างทดลองตัวเดียวควบคู่ไปกับตัวสร้างปกติ แทนที่จะรั่วไหล API ทดลองไปยัง API สาธารณะที่ไม่ใช่แบบทดลองผ่านคำอธิบายประกอบการเลือกใช้ (I9dc61, b/174531520)
  • อัปเดตพร็อพเพอร์ตี้ความสะดวก CombinedLoadStates.refresh, CombinedLoadStates.prepend CombinedLoadStates.append ให้เปลี่ยนจาก Loading เป็น NotLoading เท่านั้น หลังจากที่ทั้งสถานะการโหลดของสื่อกลางและแหล่งที่มาเป็น NotLoading เพื่อให้แน่ใจว่า การอัปเดตจากระยะไกลมีผลแล้ว (I65619)
  • นำ LoadParams.pageSize ออกแล้ว (เลิกใช้งานไปแล้ว ) เราขอแนะนำให้ใช้ LoadParams.loadSize ใน PagingSource

    LoadParams.loadSize จะเท่ากับ PagingConfig.pageSize เสมอ ยกเว้นการเรียกโหลดครั้งแรกซึ่งจะเท่ากับ PagingConfig.initialLoadSize

    หากคุณทดสอบ DataSource ของ Paging2 โดยไม่ใช้ Pager หรือ PagedList pageSize อาจไม่ตรงกับ PagingConfig.pageSize หากคุณตั้งค่า initialLoadSize ด้วย หากการทดสอบมีความสำคัญสำหรับคุณ ให้ลองใช้ Pager/PagedList แทน ซึ่งจะตั้งค่า PageSize ที่ถูกต้องสำหรับเมธอดการโหลด DataSource ภายใน (I98ac7, b/149157296)

การแก้ไขข้อบกพร่อง

  • แก้ไขข้อขัดข้องเนื่องจาก IllegalStateException เมื่อ ใช้ตัวคั่นที่มีการตั้งค่า PagingConfig.maxSize (I0ed33, b/174787528)
  • แก้ไขข้อบกพร่องที่สถานะการโหลดสำหรับ PREPEND / APPEND จะไม่อัปเดตเป็น NotLoading(endOfPaginationReached = true) ทันที หลังจากโหลดครั้งแรกหากตั้งค่า RemoteMediator ไว้ (I8cf5a)
  • แก้ไขข้อบกพร่องที่ API ฝั่งผู้นำเสนอ เช่น .snapshot(), .peek() ฯลฯ จะแสดงรายการก่อนหน้า (ล้าสมัย) ภายในการอัปเดต ListUpdateCallback
  • แก้ไขข้อบกพร่องที่โอเปอเรเตอร์ตัวคั่นจะไม่เพิ่มส่วนหัวหรือส่วนท้ายเมื่อใช้กับ RemoteMediator
  • แก้ไขข้อบกพร่องที่ทำให้การอัปเดต LoadState เป็น NotLoading สำหรับ RemoteMediator ค้างอยู่ในสถานะ Loading
  • แก้ไขข้อบกพร่องที่ API ความเข้ากันได้ของ Paging 2.0, .asPagingSourceFactory() อาจทำให้มีการเริ่มต้น DataSource ที่สนับสนุนใน CoroutineDispatcher ที่ไม่ถูกต้อง ซึ่งจะช่วยแก้ไขกรณีที่แอปขัดข้องและอาจเกิด ANR โดยเฉพาะเมื่อใช้การติดตั้งใช้งาน PagingSource ปัจจุบันของ Room ซึ่งใช้เส้นทางการทำงานร่วมกันนี้

เวอร์ชัน 3.0.0-alpha10

2 ธันวาคม 2020

androidx.paging:paging-*:3.0.0-alpha10 ได้รับการเผยแพร่แล้ว เวอร์ชัน 3.0.0-alpha10 มีคอมมิตเหล่านี้

การเปลี่ยนแปลง API

  • ระบบได้นำ API ของ dataRefreshFlow และ dataRefreshListener ที่เลิกใช้งานแล้วออก เนื่องจากซ้ำซ้อนกับการอัปเดต loadStateFlow / Listener สำหรับ ผู้ที่ย้ายข้อมูล ฟังก์ชันที่เทียบเท่ากับ loadStateFlow คือ

    loadStateFlow.distinctUntilChangedBy { it.refresh }
        .filter { it.refresh is NotLoading }
    

    (Ib5570, b/173530908)

การแก้ไขข้อบกพร่อง

  • endOfPaginationReached สำหรับ RemoteMediator REFRESH now correctly propagate to LoadState updates and prevents remote APPEND and PREPEND from triggering. (I94a3f, b/155290248)
  • การแสดงรายการที่ว่างเปล่าเนื่องจากหน้าเริ่มต้นว่างเปล่าหรือ การกรองที่เข้มงวดจะไม่ทำให้การแบ่งหน้าไม่เริ่มทำงานPREPEND หรือโหลดAPPENDอีกต่อไป (I3e702, b/168169730)
  • แก้ไขปัญหาที่ getRefreshKey ไม่ได้รับการเรียกใช้ใน PagingSource รุ่นต่อๆ ไปเมื่อมีการล้างข้อมูลอย่างรวดเร็ว (I45460, b/170027530)

การมีส่วนร่วมภายนอก

  • เพิ่มคลาส Abstract ใหม่ชื่อ InvalidatingPagingSourceFactory พร้อมด้วย .invalidate() API ที่ส่งต่อการล้างข้อมูลไปยัง PagingSource ทั้งหมด ที่ปล่อยออกมา ขอขอบคุณ @claraf3 (Ie71fc, b/160716447)

ปัญหาที่ทราบ

  • ส่วนหัวและส่วนท้ายจากการเปลี่ยนรูปแบบ .insertSeparators() อาจไม่ปรากฏในทันทีเมื่อใช้ RemoteMediator b/172254056
  • การใช้ RemoteMediator อาจทำให้ LoadState ระยะไกลค้างหากการลบล้างและ PagingSource.load(LoadParams.Refresh(...)) เสร็จสมบูรณ์ก่อนที่ RemoteMediator.load() จะแสดงผล b/173717820

เวอร์ชัน 3.0.0-alpha09

11 พฤศจิกายน 2020

androidx.paging:paging-*:3.0.0-alpha09 ได้รับการเผยแพร่แล้ว เวอร์ชัน 3.0.0-alpha09 มีคอมมิตต่อไปนี้

การเปลี่ยนแปลง API

  • เลิกใช้งานเมธอด dataRefreshFlow / Listener อย่างสมบูรณ์ด้วย replaceWith clause (I6e2dd)

การแก้ไขข้อบกพร่อง

  • แก้ไขปัญหาที่เกิด IllegalArgumentException เมื่อใช้ตัวคั่นกับ RemoteMediator และมีการทริกเกอร์การล้างข้อมูลขณะที่การโหลดจากระยะไกลซึ่งจะแสดงผล endOfPagination ยังคงทำงานอยู่ (I3a260)

เวอร์ชัน 3.0.0-alpha08

28 ตุลาคม 2020

androidx.paging:paging-*:3.0.0-alpha08 ได้รับการเผยแพร่แล้ว เวอร์ชัน 3.0.0-alpha08 มีคอมมิตเหล่านี้

การเปลี่ยนแปลง API

  • ตัวแปร Kotlin / Java ของ DataSource.InvalidatedCallback ได้รับการรวมเข้าด้วยกันโดยการเปิดใช้การแปลง SAM ใน Kotlin ผ่านอินเทอร์เฟซฟังก์ชัน (พร้อมใช้งานใน Kotlin 1.4) นอกจากนี้ยังแก้ไขข้อบกพร่องที่ไม่ได้เรียกใช้ รูปแบบ Kotlin ของการเรียกกลับ invalidate หลังจากที่แปลงแล้ว โดย .map หรือ .mapByPage (I1f244, b/165313046)

การแก้ไขข้อบกพร่อง

  • เราได้ปรับปรุงการโต้ตอบของ Paging กับ ViewPager อย่างมาก กล่าวคือ การแบ่งหน้าจะไม่ยกเลิกการเรียกใช้ RemoteMediator#load เนื่องจากการทำให้หน้าเว็บไม่ถูกต้องอีกต่อไป นอกจากนี้ จะไม่มีการส่งคำขอโหลดเพื่อต่อท้าย/นำหน้าหากต้องมีการรีเฟรชจนกว่าคำขอรีเฟรชจะเสร็จสมบูรณ์ (I6390b, b/162252536)
  • เปิดใช้การตรวจสอบ Lint ของ API สำหรับ MissingGetterMatchingBuilder สำหรับ androidx (I4bbea, b/138602561)
  • แก้ไขข้อบกพร่องที่ทำให้ตัวช่วย .withLoadState* ConcatAdapter ขัดข้องเนื่องจากการแจ้งเตือน RecyclerView จากเธรดเบื้องหลัง (I18bb5, b/170988309)
  • แก้ไขข้อบกพร่องที่บางครั้งการโหลดหน้าเว็บขนาดเล็กมากซึ่งมีเนื้อหาจะทำให้การดึงข้อมูลล่วงหน้าไม่ทริกเกอร์การโหลดอย่างถูกต้องIffda3 b/169259468

เวอร์ชัน 3.0.0-alpha07

1 ตุลาคม 2020

androidx.paging:paging-*:3.0.0-alpha07 ได้รับการเผยแพร่แล้ว เวอร์ชัน 3.0.0-alpha07 มีคอมมิตเหล่านี้

การเปลี่ยนแปลง API

  • ตอนนี้ตัวดำเนินการ Async PagingData ที่อิงตาม Guava ยอมรับ Executor เป็นพารามิเตอร์เพื่อควบคุมบริบทการดำเนินการแล้ว (Id4372)

การแก้ไขข้อบกพร่อง

  • แก้ไขข้อยกเว้น IndexOutOfBounds ที่เกิดขึ้นใน RemoteMediator เนื่องจาก เงื่อนไขการแข่งขัน (I00b7f, b/165821814)
  • แก้ไข Race Condition ในการแปลง DataSource -> PagingSource ซึ่งอาจทำให้ PagingSource ที่ได้ไม่สนใจสัญญาณการลบล้างจาก DataSource
  • แก้ไขปัญหาในตรรกะการดึงข้อมูลหน้าซึ่งบางครั้งอาจทำให้ไม่สามารถเลือก PagingSource รุ่นใหม่ได้จนกว่าจะมีการเรียกใช้ PagingDataAdapter.refresh()
  • แก้ไขปัญหาที่ทำให้บางครั้งตำแหน่งการเลื่อนหายไปเมื่อใช้ DataSource ที่แปลงเป็น PagingSource (เช่น รายการที่สร้างโดย Room) ร่วมกับ RemoteMediator

การมีส่วนร่วมภายนอก

  • ขอขอบคุณ @simonschiller ที่เพิ่มตัวดำเนินการแปลงแบบไม่พร้อมกันที่อิงตาม RxJava2, RxJava3 และ Guava สำหรับ PagingData

เวอร์ชัน 3.0.0-alpha06

2 กันยายน 2020

androidx.paging:paging-*:3.0.0-alpha06 ได้รับการเผยแพร่แล้ว เวอร์ชัน 3.0.0-alpha06 มีคอมมิตเหล่านี้

การเปลี่ยนแปลง API

  • UnsupportedOperationException พร้อมข้อความที่ชัดเจนยิ่งขึ้นเกี่ยวกับการ ไม่รองรับรหัสที่เสถียรจะแสดงขึ้นทุกครั้งที่มีการเรียกใช้ PagingDataAdapter.setHasStableIds (Ib3890, b/158801427)

การแก้ไขข้อบกพร่อง

  • insertSeparators จะไม่กรองหน้าว่างออกอีกต่อไป ซึ่งจะช่วยให้ ผู้แสดงเคารพระยะทางในการดึงข้อมูลล่วงหน้าได้แม้ในกรณีที่มีการแทรกหน้าว่างจำนวนมาก (I9cff6, b/162538908)

เวอร์ชัน 3.0.0-alpha05

19 สิงหาคม 2020

androidx.paging:paging-*:3.0.0-alpha05 ได้รับการเผยแพร่แล้ว เวอร์ชัน 3.0.0-alpha05 มีคอมมิตต่อไปนี้

การแก้ไขข้อบกพร่อง

  • ตอนนี้การแบ่งหน้าจะโหลดหน้าเว็บล่วงหน้าอย่างถูกต้องแม้ว่าจะกรองข้อมูลที่แสดงอย่างละเอียดก็ตาม
  • การส่ง LoadResult.Error กลับไปโหลดซ้ำจะไม่ทำให้การเข้าถึงรายการทริกเกอร์การลองใหม่ซ้ำอย่างไม่ถูกต้องอีกต่อไป

การมีส่วนร่วมภายนอก

  • ขอขอบคุณ Clara F ที่ช่วยเราทำความสะอาดการทดสอบบางอย่าง (549612)

เวอร์ชัน 3.0.0-alpha04

5 สิงหาคม 2020

androidx.paging:paging-*:3.0.0-alpha04 ได้รับการเผยแพร่แล้ว เวอร์ชัน 3.0.0-alpha04 มีคอมมิตต่อไปนี้

การเปลี่ยนแปลง API

  • เพิ่ม peek() API ลงใน AsyncPagingDataDiffer และ PagingDataAdapter เพื่ออนุญาตให้เข้าถึงข้อมูลที่แสดงโดยไม่ต้องโหลดหน้าเว็บที่ทริกเกอร์ (I38898, b/159104197)
  • เพิ่ม snapshot() API ลงใน PagingDataAdapter และ AsyncPagingDataDiffer เพื่อให้ดึงข้อมูลรายการที่แสดงได้โดยไม่ต้อง ทริกเกอร์การดึงข้อมูลหน้าเว็บ (I566b6, b/159104197)
  • เพิ่มPagingData.from(List<T>)ตัวสร้างเพื่ออนุญาต การแสดงรายการแบบคงที่ ซึ่งสามารถใช้ร่วมกับโฟลว์ PagingData โดยรวม เพื่อแสดงรายการแบบคงที่ในบางสถานะ เช่น ก่อน การรีเฟรชครั้งแรกจะเสร็จสิ้น หรือใช้เพื่อทดสอบการเปลี่ยนรูปแบบ (Id134d)
  • เลิกใช้งาน DataRefresh Flow / Listener API เนื่องจากมีไว้เพื่อแสดงสถานะของรายการที่แสดงเมื่อรีเฟรช แต่ด้วยการปรับปรุงเวลาเรียกกลับของ LoadState Flow / Listener และพร็อพเพอร์ตี้ itemCount จึงซ้ำซ้อน (Ia19f3)
  • เพิ่ม Wrapper ความเข้ากันได้ของ RxJava3 สำหรับ PagingSource และ RemoteMediator (I49ef3, b/161480176)

การแก้ไขข้อบกพร่อง

  • PositionalDataSource ที่แปลงเป็น PagingSource ผ่าน toPagingSourceFactory Helper รวมถึง PagingSource ที่สร้างโดย Room จะทำเครื่องหมายตัวเองอย่างถูกต้องเพื่อรองรับการข้าม (I3e84c, b/162161201)
  • แก้ไขข้อบกพร่องที่การใช้ตัวแปรแบบซิงโครนัสของ submitData บางครั้งอาจทำให้เกิดการแข่งขันซึ่งทำให้เกิด ClosedSendChannelException (I4d702, b/160192222)

การมีส่วนร่วมภายนอก

  • ขอขอบคุณ Zac Sweers ที่เพิ่ม Wrapper ความเข้ากันได้ของ RxJava3 ในนามของ Slack (I49ef3, b/161480176)

เวอร์ชัน 3.0.0-alpha03

22 กรกฎาคม 2020

androidx.paging:paging-*:3.0.0-alpha03 ได้รับการเผยแพร่แล้ว เวอร์ชัน 3.0.0-alpha03 มีคอมมิตต่อไปนี้

การเปลี่ยนแปลง API

  • ตอนนี้ตัวสร้างสำหรับ PagingState เป็นแบบสาธารณะแล้ว ซึ่งจะช่วยให้การทดสอบการใช้งาน getRefreshKey() ง่ายขึ้น (I8bf15)
  • ซ่อนฟังก์ชันแผนที่ Kotlin ของแหล่งข้อมูล Hid จาก Java เพื่อ แก้ไขความคลุมเครือระหว่างตัวแปรเดิมกับตัวแปร Kotlin (If7b23, b/161150011)
  • API ที่ซ้ำกันซึ่งมีไว้เพื่ออำนวยความสะดวกแก่ผู้ใช้ Kotlin ได้รับการทำเครื่องหมาย @JvmSynthetic (I56ae5)
  • เพิ่มการโอเวอร์โหลดสำหรับตัวสร้างของ LoadResult.Page ซึ่งตั้งค่าเริ่มต้นของ itemsBefore และ itemsAfter เป็น COUNT_UNDEFINED (I47849)
  • ทำให้ตัวดำเนินการ PagingData ที่มีอยู่ยอมรับเมธอดระงับ และเปิดตัวตัวดำเนินการ mapSync, flatMapSync และ filterSync ใหม่ที่ไม่ระงับ สำหรับผู้ใช้ Java เราได้ย้ายวิธีการเปลี่ยนรูปแบบที่มีอยู่ไปไว้ในฟังก์ชันส่วนขยายแล้ว ดังนั้นผู้ใช้ Kotlin จะต้องนำเข้าฟังก์ชันเหล่านั้น (I34239, b/159983232)

การแก้ไขข้อบกพร่อง

  • ตอนนี้ PagingSource ของ Room (และ PositionalDataSource) จะ แสดงตัวคั่นนำเป็นส่วนหนึ่งของหน้าแรก เพื่อให้ผู้ใช้ ไม่ต้องเลื่อนเพื่อดู (I6f747, b/160257628)
  • ตอนนี้การเข้าถึงรายการในตัวยึดตำแหน่งจะทริกเกอร์การโหลด PagingSource อย่างถูกต้องจนกว่าจะมีการส่งคืนหน้าเว็บที่ตรงกับดัชนีที่ขอหลังจากที่ PagingData.filter() เปลี่ยนรูปแบบแล้ว (I95625, b/158763195)
  • แก้ไขข้อบกพร่องที่บางครั้งการเลื่อนหลังจากที่ PagingSource แสดงข้อผิดพลาดอาจทำให้ PagingDataAdapter.retry() ไม่สามารถลองอีกครั้งได้ (I1084f, b/160194384)
  • แก้ไขปัญหาที่การเข้าถึงรายการหลังจากวางหน้าอาจ ไม่โหลดหน้าแม้ว่าการเข้าถึงรายการจะอยู่ภายใน prefetchDistance (Ie95ae, b/160038730)
  • การตั้งค่า PagingConfig.maxSize จะไม่เปิดใช้ตัวยึดตำแหน่งอีกต่อไป หลังจากเหตุการณ์การวาง (I2be29, b/159667766)

เวอร์ชัน 3.0.0-alpha02

24 มิถุนายน 2020

androidx.paging:paging-*:3.0.0-alpha02 ได้รับการเผยแพร่แล้ว เวอร์ชัน 3.0.0-alpha02 มีคอมมิตต่อไปนี้

การเปลี่ยนแปลง API

  • เพิ่มการโอเวอร์โหลดสำหรับตัวสร้างของ PagingConfig ด้วยค่าเริ่มต้นทั่วไป (I39c50, b/158576040)
  • เพิ่มการโอเวอร์โหลดสำหรับตัวสร้างของ PagingDataAdapter และ AsyncPagingDataDiffer ด้วยค่าเริ่มต้นทั่วไป (Ie91f5)
  • ตอนนี้ API ของอะแดปเตอร์ dataRefreshFlow และ dataRefreshListener จะส่งค่าบูลีนเพื่อส่งสัญญาณว่า PagingData ว่างหรือไม่ (I6e37e, b/159054196)
  • เพิ่ม API ของ RxJava และ Guava สำหรับ RemoteMediator - RxRemoteMediator และ ListenableFutureRemoteMediator
  • เพิ่มตัวช่วยไปยัง PagingState สำหรับการเข้าถึงรายการทั่วไป เช่น isEmpty() และ firstItemOrNull() (I3b5b6, b/158892717)

การแก้ไขข้อบกพร่อง

  • ตอนนี้ Pager จะตรวจสอบการนำ PagingSource กลับมาใช้ซ้ำในโรงงานเพื่อป้องกันการนำ PagingSource ที่ไม่ถูกต้องกลับมาใช้ซ้ำโดยไม่ตั้งใจ ซึ่งทำให้เกิดข้อผิดพลาดที่ไม่ชัดเจน (I99809, b/158486430)
  • ความล้มเหลวจากการรีเฟรช RemoteMediator จะไม่ทำให้ PagingSource โหลดไม่ได้อีกต่อไป (I38b1b, b/158892717)
  • เวอร์ชันที่ไม่ระงับของ submitData จะไม่ทำให้เกิดข้อขัดข้องเนื่องจากการรวบรวมพร้อมกันใน PagingData หลายรายการเมื่อเรียกใช้หลังจากเวอร์ชันที่ระงับของ submitData (I26358, b/158048877)
  • แก้ไขข้อยกเว้น "รวบรวมจากเพจเจอร์ 2 ครั้งไม่ได้" ที่อาจเกิดขึ้นหลังจากการเปลี่ยนแปลงการกำหนดค่า (I58bcc, b/158784811)

เวอร์ชัน 3.0.0-alpha01

10 มิถุนายน 2020

androidx.paging:paging-*:3.0.0-alpha01 ได้รับการเผยแพร่แล้ว เวอร์ชัน 3.0.0-alpha01 มีคอมมิตเหล่านี้

Paging Library ได้รับการอัปเดตเป็น 3.0 เพื่อเปิดใช้ฟีเจอร์ใหม่ๆ ที่สำคัญหลายอย่าง

ฟีเจอร์ใหม่ของเวอร์ชัน 3.0

ปัญหาที่ทราบ

  • Javadoc ของ Paging 3 ยังไม่พร้อมใช้งาน ในระหว่างนี้ โปรดใช้คำแนะนำที่ลิงก์ไว้ด้านบนหรือเอกสารประกอบของ Kotlin (b/158614050)

เวอร์ชัน 2.1.2

เวอร์ชัน 2.1.2

18 มีนาคม 2020

androidx.paging:paging:2.1.2 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.1.2 มีคอมมิตเหล่านี้เทียบกับ 2.1.0

การแก้ไขข้อบกพร่อง

  • แก้ไขปัญหาสำหรับ IndexOutOfBoundsException ในกรณีที่แทบจะไม่เคยเกิดขึ้นเมื่อแปลงตำแหน่งระหว่างการลบล้าง

ปัญหาเกี่ยวกับการเผยแพร่

  • เราเผยแพร่เวอร์ชันการแบ่งหน้า 2.1.1 อย่างไม่ถูกต้องจากสาขาที่กำหนดค่าไม่ถูกต้อง ซึ่งทำให้ API และฟังก์ชันที่ยังไม่ได้ใช้งานบางส่วนเปิดเผยต่อสาธารณะ ซึ่งฟีเจอร์เหล่านี้จะพร้อมใช้งานในรุ่นต่อๆ ไป

  • การแบ่งหน้า 2.1.2 มีการแก้ไขการโหลดที่กึ่งกลางซึ่งเปิดตัวครั้งแรกใน 2.1.1 แต่ครั้งนี้ได้เลือกอย่างถูกต้องบนการเปิดตัว 2.1.0 ขอแนะนำเป็นอย่างยิ่งให้อัปเกรดเป็นรุ่นนี้ หากคุณใช้เวอร์ชัน 2.1.1 อยู่

เวอร์ชัน 2.1.1

เวอร์ชัน 2.1.1

18 ธันวาคม 2019

androidx.paging:paging-*:2.1.1 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.1.1 มีคอมมิตเหล่านี้

แก้ไขข้อบกพร่อง

  • ตอนนี้การโหลดเริ่มต้นที่ต่อเนื่องจาก PositionalDataSources จะอยู่ตรงกลางรอบการเข้าถึงครั้งล่าสุดเมื่อปิดใช้ตัวยึดตำแหน่ง

เวอร์ชัน 2.1.0

เวอร์ชัน 2.1.0

25 มกราคม 2019

การแบ่งหน้า 2.1.0 จะเปิดตัวโดยไม่มีการเปลี่ยนแปลงจาก 2.1.0-rc01

เวอร์ชัน 2.1.0-rc01

6 ธันวาคม 2018

การแบ่งหน้า 2.1.0-rc01 จะเปิดตัวโดยไม่มีการเปลี่ยนแปลงจาก 2.1.0-beta01

เวอร์ชัน 2.1.0-beta01

1 พฤศจิกายน 2018

การแบ่งหน้า 2.1.0-beta01 จะเปิดตัวโดยไม่มีการเปลี่ยนแปลงจาก 2.1.0-alpha01

เวอร์ชัน 2.1.0-alpha01

12 ตุลาคม 2018

Paging 2.1.0-alpha01 มีการเพิ่มฟีเจอร์หลัก 2 อย่าง ได้แก่ การทิ้งหน้า และไลบรารีส่วนขยาย KTX สำหรับทุกอาร์ติแฟกต์ รวมถึงการเปลี่ยนแปลง API อื่นๆ และการแก้ไขข้อบกพร่องอีกหลายอย่าง

การเปลี่ยนแปลง API

  • เพิ่ม PagedList.Config.Builder.setMaxSize() เพื่อจำกัดจำนวนรายการที่โหลดในหน่วยความจำ
  • เพิ่ม androidx.paging.Config() เป็นทางเลือก Kotlin สำหรับ PagedList.Config.Builder
  • เพิ่ม androidx.paging.PagedList() เป็นทางเลือก Kotlin สำหรับ PagedList.Builder
  • เพิ่ม DataSourceFactory.toLiveData() เป็นทางเลือก Kotlin สำหรับ LivePagedListBuilder
  • เพิ่ม DataSourceFactory.toObservable() และ toFlowable() เป็นทางเลือก Kotlin สำหรับ RxPagedListBuilder
  • เพิ่ม AsyncPagedListDiffer.addPagedListListener() สำหรับการฟังเมื่อมีการสลับ PagedList b/111698609
  • เพิ่มPagedListAdapter.onCurrentListChanged()ตัวแปรที่ส่งผ่านรายการเก่าและใหม่ เลิกใช้งานตัวแปรก่อนหน้า
  • เพิ่มตัวแปร PagedListAdapter/AsyncPagedListDiffer.submitList() ซึ่งใช้ Callback เพิ่มเติมที่จะทริกเกอร์เมื่อ/หากมีการแสดงรายการแบบแบ่งหน้าหลังจากเปรียบเทียบความแตกต่าง ซึ่งจะช่วยให้คุณซิงโครไนซ์การสลับ PagedList กับการอัปเดต UI อื่นๆ ได้ b/73781068
  • PagedList.getLoadedCount() เพื่อให้คุณทราบว่ามีรายการอยู่ในหน่วยความจำกี่รายการ โปรดทราบว่าค่าที่ส่งคืนจะเท่ากับ .size() เสมอหากปิดใช้ตัวยึดตำแหน่ง

การแก้ไขข้อบกพร่อง

  • แก้ไขเงื่อนไขการแข่งขันเมื่อทำการเปรียบเทียบหากมีการนำรายการกลับมาใช้ซ้ำ b/111591017
  • PagedList.loadAround() จะแสดงข้อผิดพลาด IndexOutOfBoundsException เมื่อดัชนีไม่ถูกต้อง ก่อนหน้านี้แอปอาจขัดข้องโดยมีข้อยกเว้นอื่นๆ ที่ไม่ชัดเจน
  • แก้ไขกรณีที่ขนาดการโหลดเริ่มต้นที่เล็กมากร่วมกับข้อมูลที่ไม่เปลี่ยนแปลงจะส่งผลให้ไม่มีการโหลดเพิ่มเติม b/113122599

เวอร์ชัน 2.0.0

เวอร์ชัน 2.0.0

1 ตุลาคม 2018

Paging 2.0.0 เปิดตัวพร้อมการแก้ไขข้อบกพร่องเพียงรายการเดียว

การแก้ไขข้อบกพร่อง

  • แก้ไขข้อขัดข้องที่อาจเกิดขึ้นเมื่อเลื่อนอย่างรวดเร็วโดยใช้ PositionalDataSource และตัวยึดตำแหน่ง b/114635383

เวอร์ชัน 2.0.0-beta01

2 กรกฎาคม 2018

การแก้ไขข้อบกพร่อง

  • แก้ไขปัญหาเนื้อหาหายไปในบางกรณีที่ใช้การเพิ่มด้านหน้า (ปิดใช้ตัวยึดตำแหน่ง, PositionalDataSource) b/80149146
  • (เปิดตัวแล้วใน 1.0.1) แก้ไขปัญหาการขัดข้องที่ PagedListAdapter และ AsyncPagedListDiffer ไม่สามารถส่งสัญญาณเหตุการณ์การย้าย b/110711937

การอ้างอิงก่อน AndroidX

สำหรับ Paging เวอร์ชันก่อน AndroidX ที่ตามมา ให้รวมการขึ้นต่อกันต่อไปนี้

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"
}

เวอร์ชัน 1.0.1

เวอร์ชัน 1.0.1

26 มิถุนายน 2018

Paging 1.0.1 เปิดตัวพร้อมการแก้ไขข้อบกพร่องเพียงรายการเดียวใน runtime เราขอแนะนำให้ใช้ 1.0.1 เพื่อความเสถียร นอกจากนี้ เรายังได้เปิดตัว Paging RxJava2 1.0.1 ซึ่งเหมือนกับ 1.0.0-rc1 ทุกประการ

การแก้ไขข้อบกพร่อง

  • แก้ไขปัญหาการขัดข้องที่ PagedListAdapter และ AsyncPagedListDiffer ไม่สามารถส่งสัญญาณเหตุการณ์การย้าย b/110711937

RxJava2 เวอร์ชัน 1.0.0

RxJava2 เวอร์ชัน 1.0.0-rc1

16 พฤษภาคม 2018

Paging RxJava2 1.0.0-rc1 จะเปลี่ยนไปเป็นรุ่นที่อาจได้รับการเผยแพร่โดยไม่มีการเปลี่ยนแปลงจากอัลฟ่ารุ่นแรก

เวอร์ชัน 1.0.0

เวอร์ชัน 1.0.0-rc1

19 เมษายน 2018 รุ่นที่อาจได้รับการเผยแพร่ของการแบ่งหน้า

เราไม่มีปัญหาที่ทราบเพิ่มเติมหรือฟีเจอร์ใหม่ที่กำหนดไว้สำหรับการเปิดตัว การแบ่งหน้า1.0.0 โปรดอัปเกรดโปรเจ็กต์เพื่อใช้ 1.0.0-rc1 และช่วยเราทดสอบเพื่อหาข้อบกพร่อง เพื่อให้เราสามารถเปิดตัว 1.0.0 ที่เสถียรได้

รุ่นนี้ไม่มีการเปลี่ยนแปลงใดๆ โดยจะเหมือนกับ 1.0.0-beta1

เวอร์ชัน 1.0.0-beta1

5 เมษายน 2018

การแบ่งหน้าจะอยู่ในเวอร์ชันเบต้าเป็นระยะเวลาสั้นๆ ก่อนที่จะเปลี่ยนเป็นเวอร์ชันที่พร้อมเผยแพร่ เราไม่มีแผนที่จะเปลี่ยนแปลง API เพิ่มเติมสำหรับ Paging 1.0 และการเปลี่ยนแปลง API ใดๆ จะต้องมีเกณฑ์ที่สูงมาก

เราได้เปิดตัวการรองรับ RxJava2 เวอร์ชันอัลฟ่าสำหรับ Paging เป็นโมดูลแยกต่างหากที่ไม่บังคับ (android.arch.paging:rxjava2:1.0.0-alpha1) และจะกำหนดเวอร์ชันแยกต่างหากชั่วคราวจนกว่าจะเสถียร

ไลบรารีใหม่นี้มีทางเลือก RxJava2 สำหรับ LivePagedListBuilder ซึ่งสร้าง Observable และ Flowable ได้โดยใช้ Scheduler แทน 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();

ฟีเจอร์ใหม่

  • RxPagedListBuilder จะเพิ่มผ่านอาร์ติแฟกต์ android.arch.paging:rxjava2 ใหม่

การเปลี่ยนแปลง API

  • การเปลี่ยนแปลง API เพื่อชี้แจงบทบาทของตัวดำเนินการในเครื่องมือสร้าง

    • เปลี่ยนชื่อ setBackgroundThreadExecutor() เป็น setFetchExecutor() (ใน PagedList.Builder และ LivePagedListBuilder)

    • เปลี่ยนชื่อ setMainThreadExecutor() เป็น setNotifyExecutor() (ใน PagedList.Builder)

  • แก้ไขให้PagedList.mCallbacksสมาชิกเป็นแบบส่วนตัว

การแก้ไขข้อบกพร่อง

  • LivePagedListBuilder จะทริกเกอร์การโหลดเริ่มต้นของ PagedList ในตัวดำเนินการที่ระบุ แทนที่จะเป็นกลุ่มเธรด I/O ของ Arch Components

  • แก้ไขลักษณะการทำงานของการลบล้างใน DataSource Wrapper ภายใน (ใช้เพื่อติดตั้งใช้งาน DataSource.map รวมถึงการโหลด PositionalDataSource ที่ปิดใช้ตัวยึดตำแหน่ง) b/77237534

เวอร์ชัน 1.0.0-alpha7

21 มีนาคม 2018

การแบ่งหน้า 1.0.0-alpha7 จะเปิดตัวพร้อมกับวงจรของลูกค้า 1.1.1 เนื่องจาก Paging alpha7 ขึ้นอยู่กับการย้ายคลาส Function ที่กล่าวถึงข้างต้น คุณจะต้องอัปเดตการอ้างอิง lifecycle:runtime เป็น android.arch.lifecycle:runtime:1.1.1

เราวางแผนที่จะให้ alpha7 เป็นรุ่นสุดท้ายก่อนที่ฟีเจอร์การเพจจะเข้าสู่รุ่นเบต้า

การเปลี่ยนแปลง API

  • ตอนนี้ออบเจ็กต์ DataSource.LoadParams มีตัวสร้างสาธารณะแล้ว และออบเจ็กต์ DataSource.LoadCallback เป็นนามธรรมแล้ว ซึ่งช่วยให้คุณสามารถห่อหุ้ม DataSource หรือทดสอบ DataSource โดยตรงด้วยการเรียกกลับจำลอง b/72600421
  • Mapper สำหรับ DataSource และ DataSource.Factory
    • map(Function<IN,OUT>) ช่วยให้คุณเปลี่ยนรูป ห่อ หรือตกแต่งผลลัพธ์ที่โหลดโดย DataSource
    • mapByPage(<List<IN>,List<OUT>>) ช่วยให้ทำเช่นเดียวกันกับการประมวลผลแบบกลุ่มได้ (เช่น หากรายการที่โหลดจาก SQL ต้องค้นหาฐานข้อมูลแยกต่างหากเพิ่มเติม ก็สามารถทำได้เป็นกลุ่ม)
  • เพิ่ม PagedList#getDataSource() เป็นวิธีการที่สะดวก b/72611341
  • เราได้นำคลาสที่เลิกใช้งานแล้วทั้งหมดออกจาก API รวมถึงส่วนที่เหลือของแพ็กเกจ recyclerview.extensions และ LivePagedListProvider
  • DataSource.Factory เปลี่ยนจากอินเทอร์เฟซเป็นคลาสแบบนามธรรมเพื่อเปิดใช้ฟังก์ชันแผนที่

การแก้ไขข้อบกพร่อง

  • เปลี่ยน Builders ให้เป็น final b/70848565
  • ตอนนี้เราได้แก้ไขการติดตั้งใช้งาน Room DataSource เพื่อรองรับการค้นหาหลายตารางแล้ว โดยการแก้ไขนี้อยู่ใน Room 1.1.0-beta1 ดูด้านบน
  • แก้ไขข้อบกพร่องที่ BoundaryCallback.onItemAtEndLoaded จะไม่เรียกใช้สำหรับ PositionalDataSource หากเปิดใช้ตัวยึดตำแหน่งและ ขนาดทั้งหมดเป็นผลคูณที่แน่นอนของขนาดหน้าเว็บ

เวอร์ชัน 1.0.0-alpha5

22 มกราคม 2018

การแก้ไขข้อบกพร่อง

  • แก้ไขการโหลดหน้าเว็บเมื่อปิดใช้ตัวยึดตำแหน่ง b/70573345
  • การบันทึกเพิ่มเติมเพื่อติดตามข้อบกพร่อง IllegalArgumentException b/70360195 (และการแก้ไขฝั่ง Room โดยคาดการณ์)
  • แก้ไขโค้ดตัวอย่าง Javadoc b/70411933, b/71467637