การแบ่งหน้า

ไลบรารีการแบ่งหน้าทำให้ เพื่อให้คุณโหลดข้อมูลอย่างค่อยเป็นค่อยไปและราบรื่น RecyclerView

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

อาร์ติแฟกต์ รุ่นที่เสถียร ตัวเลือกถอนการอ้างสิทธิ์ รุ่นเบต้า รุ่นอัลฟ่า
การแบ่งหน้า-* 3.3.2 - - -
การแบ่งหน้า 3.3.2 - - -
ไลบรารีนี้ได้รับการอัปเดตล่าสุดเมื่อวันที่ 7 สิงหาคม 2024

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

หากต้องการเพิ่มทรัพยากร Dependency สำหรับการแบ่งหน้า คุณต้องเพิ่มที่เก็บของ Google Maven ไปยัง อ่านที่เก็บ Maven ของ Google เพื่อดูข้อมูลเพิ่มเติม

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

ดึงดูด

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

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

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

ความคิดเห็น

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

สร้างรายการใหม่

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

เวอร์ชัน 3.3

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

ความเข้ากันได้กับหลายแพลตฟอร์มของ Kotlin

ปัจจุบันการแบ่งหน้าจะจัดส่งอาร์ติแฟกต์ที่เข้ากันได้กับ 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

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

เวอร์ชัน 3.3.0-alpha04

6 มีนาคม 2024

ปล่อย androidx.paging:paging-*:3.3.0-alpha04 แล้ว เวอร์ชัน 3.3.0-alpha04 มีคอมมิตเหล่านี้

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

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

เวอร์ชัน 3.3.0-alpha03

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

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

ฟีเจอร์ใหม่

  • PagingDataPresenter เป็นชั้นเรียนสาธารณะแล้ว สร้างผู้นำเสนอหลายแพลตฟอร์มบน PagingDataPresenter ได้แล้ว แทนที่จะต้องใช้ Paging API ภายในหรือ AsyncPagingDataDiffer ของ paging-runtime (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

ปัจจุบันการแบ่งหน้าจะจัดส่งอาร์ติแฟกต์ที่เข้ากันได้กับ Kotlin Multiplatform ซึ่งส่วนใหญ่แล้วเป็นงานอัปสตรีมจากโปรเจ็กต์ Multiplatform-Paging ของ CashApp วิธีนี้จะช่วยให้เราหลีกเลี่ยงการแตกต่างกันระหว่างที่เก็บ 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 ของอาร์ติแฟกต์การทดสอบการแบ่งหน้าค้างเมื่อผ่านโฟลว์ที่สร้างขึ้นโดยใช้ PagingData.from(List) เนื่องจาก asSnapshot() ไม่มีข้อมูลใดๆ เมื่อโหลดเสร็จสิ้น (ต่างจากการโอเวอร์โหลด PagingData.from(List, LoadStates)) วิธีแก้ปัญหาเบื้องต้นนี้ใช้ได้กับโฟลว์ที่เสร็จสมบูรณ์เท่านั้น (เช่น flowOf(PagingData.from(...))) สําหรับโฟลว์ที่ไม่สมบูรณ์ (เช่น MutableStateFlow ใช้โอเวอร์โหลด PagingData.from ที่ให้ LoadStates) (I502c3)
  • ขณะนี้การเขียนหน้าเขียนจะใช้ 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 อื่นๆ ทั้งหมด การเปลี่ยนแปลงที่มีมาตั้งแต่ 3.1.0 ประกอบด้วย
    • รองรับการแสดงตัวอย่างรายการข้อมูลปลอมด้วยการสร้าง PagingData.from(fakeData) และรวม PagingData นั้นไว้ใน MutableStateFlow (เช่น MutableStateFlow(PagingData.from(listOf(1, 2, 3)))) ส่งต่อขั้นตอนนี้ไปยัง Composable @Preview เป็นรีซีฟเวอร์เพื่อให้ collectAsLazyPagingItems() แสดงตัวอย่าง
    • รองรับเลย์เอาต์แบบ Lazy Loading ทั้งหมด เช่น LazyVerticalGrid และ HorizontalPager รวมถึงคอมโพเนนต์แบบ Lazy ที่กำหนดเองจากไลบรารี Wear และ TV โดยทำได้ผ่านเมธอดส่วนขยาย itemKey และ itemContentType ระดับที่ต่ำกว่าใหม่ ซึ่งช่วยให้คุณนำพารามิเตอร์ key และ contentType ไปใช้กับ API มาตรฐาน items ที่มีอยู่แล้วสำหรับ LazyColumn, LazyVerticalGrid รวมถึง API ที่เทียบเท่าใน API เช่น HorizontalPager อยู่แล้วLazyPagingItems
    • เลิกใช้งาน items(lazyPagingItems) และ itemsIndexed(lazyPagingItems) ที่รองรับเฉพาะ LazyListScope แล้ว
  • อาร์ติแฟกต์ paging-testing ใหม่ซึ่งมี API ที่ออกแบบโดยการทดสอบ 1 หน่วยของแอปแต่ละเลเยอร์และการผสานรวมกับการแบ่งหน้าโดยแยกออกมาต่างหาก ตัวอย่างเช่น มี
    • TestPager ที่ให้คุณตรวจสอบลักษณะการทำงานของการติดตั้งใช้งาน PagingSource ที่กำหนดเองอย่างอิสระจากเพจเจอร์และ UI จริง
    • asPagingSourceFactory API ที่เปลี่ยนรูปแบบ Flow<List<Value>> หรือ List<Value> แบบคงที่ให้เป็น PagingSourceFactory ที่ส่งไปยังเพจเจอร์ในระหว่างการทดสอบได้
    • 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] ซึ่งจะมีผลกับทั้งการแบ่งหน้าที่มีข้อมูลพร็อพเพอร์ตี้หรือการแบ่งหน้าที่มีการเขียน
  • เพิ่มตัวสร้างสำหรับ PagingDataAdapter และ AsyncPagingDataDiffer ซึ่งยอมรับ CoroutineContext แทน CoroutineDispatcher
  • เพิ่มอินเทอร์เฟซการทำงานใหม่ของ PagingSourceFactory ที่มี Surfaces API ที่ชัดเจนกว่า () -> ก่อนหน้านี้ PagingSource แลมบ์ดา โรงงานนี้สามารถใช้ในการสร้างเพจเจอร์ได้

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

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

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

    ซึ่งทำผ่านส่วนขยาย Kotlin asSnapshot ใน Flow<PagingData<Value>> ซึ่งจะแปล Flow<PagingData<Value>> เป็น List<Value> โดยตรง lambda asSnapshot ให้คุณเลียนแบบ 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, Ib29b9, Ib29b, I16}

การเปลี่ยนแปลง 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 ที่ออกแบบมาเพื่อทดสอบหน่วยการทดสอบแต่ละเลเยอร์ของแอปและการผสานรวมกับการแบ่งหน้าโดยแยกออกจากกัน

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

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

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

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

  • เปิดใช้การทำซ้ำที่สะดวกในช่วง LoadResult.Page.data ถึง LoadResult.Page.iterator() วิธีนี้ทำให้สามารถใช้เมธอดไลบรารีมาตรฐานของ Kotlin 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

  • API ของ Flow<PagingData>.observable และ Flow<PagingData>.flowable ไม่ได้เป็นการทดลองอีกต่อไป
  • การเปลี่ยนแปลงลักษณะการทำงานของ 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 ซึ่งทำให้การแบ่งหน้าทิ้งคำขอโหลดที่รอดำเนินการหรือในอนาคตที่ส่งไปยัง PagingSource นี้ และทำให้การดำเนินการนี้เป็นโมฆะ การแสดงผลประเภทนี้ได้รับการออกแบบมาเพื่อจัดการกับข้อมูลที่อาจไม่ถูกต้องหรือล้าสมัย ซึ่งสามารถส่งคืนจากฐานข้อมูลหรือเครือข่ายได้
  • เพิ่ม API ของผู้นำเสนอ .onPagesPresented และ .addOnPagesUpdatedListener ซึ่งทริกเกอร์ให้พร้อมกันเมื่อหน้าเว็บแสดงใน UI การอัปเดตหน้าเว็บอาจเกิดขึ้นในสถานการณ์ต่อไปนี้
    • การโหลดเริ่มต้นของ PagingData รุ่นใหม่จะเสร็จสมบูรณ์ ไม่ว่ารุ่นใหม่จะมีการเปลี่ยนแปลงรายการที่นำเสนอหรือไม่ก็ตาม นั่นคือ รุ่นใหม่ที่ทำการโหลดครั้งแรกเสร็จสมบูรณ์โดยไม่มีการอัปเดตเนื่องจากรายการเหมือนกันทุกประการจะยังคงเรียกใช้ Callback นี้
    • ระบบจะแทรกหน้าเว็บ แม้ว่าหน้าที่แทรกจะไม่มีรายการใหม่ก็ตาม
    • หน้าเว็บจะหายไป แม้ว่าหน้าที่วางจะว่างเปล่าก็ตาม

เวอร์ชัน 3.1.0-rc01

3 พฤศจิกายน 2021

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

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

  • แก้ไขเงื่อนไขการแข่งขัน + หน่วยความจำรั่วไหลใน .cachedIn() ในกรณีที่มีการส่งเหตุการณ์โหลดหลายรายการผ่านการสร้างหน้าดาวน์สตรีมขณะที่ไม่มีผู้สังเกตการณ์หรือระหว่างที่ผู้สังเกตการณ์กำลังเปลี่ยนไปใช้ 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

  • Flow<PagingData>.observable และ Flow<PagingData>.flowable API ไม่มีอยู่ในการทดลองแล้ว (Ie0bdd)

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

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

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

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

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

เวอร์ชัน 3.1.0-alpha03

21 กรกฎาคม 2021

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

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

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

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

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

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

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

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

เวอร์ชัน 3.1.0-alpha02

1 กรกฎาคม 2021

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

ฟีเจอร์ใหม่

  • เพิ่ม onPagesDisplayed Listener และ API ผู้นำเสนอโฟลว์ ซึ่งจะทริกเกอร์ทันทีหลังจากหน้านำเสนอ มีการอัปเดตใน UI

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

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

    • การโหลดเริ่มต้นของ PagingData รุ่นใหม่เสร็จสมบูรณ์ ไม่ว่าคนรุ่นใหม่จะมีการเปลี่ยนแปลง รายการที่นำเสนอ นั่นคือ แอปรุ่นใหม่ที่ดำเนินการโหลดเริ่มต้นเสร็จสมบูรณ์ ไม่มีการอัปเดต เนื่องจากรายการเหมือนเดิมทุกประการ เรียกใช้ Callback นี้
    • มีการแทรกหน้าเว็บ แม้ว่าหน้าที่แทรกจะไม่มีหน้า รายการ
    • หน้าเว็บจะหายไป แม้ว่าหน้าที่วางจะว่างเปล่าก็ตาม (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)

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

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

การสนับสนุนภายนอก

  • เพิ่ม PagedList Compat API ที่เลิกใช้งานแล้วไปยังอาร์ติแฟกต์ 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 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • ตอนนี้การสร้างหน้าเขียนรองรับการแสดงตัวอย่างรายการข้อมูลปลอมด้วยการสร้าง 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 มีคอมมิตเหล่านี้

รองรับเลย์เอาต์แบบ Lazy Loading ทั้งหมด

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

เพื่อรองรับเลย์เอาต์แบบ Lazy Loading ได้มากขึ้น เราต้องสร้าง API ไว้ที่เลเยอร์อื่น แทนการมอบ API items ที่กําหนดเองสําหรับเลย์เอาต์แบบ Lazy Loading แต่ละเลย์เอาต์ ขณะนี้ Paging Compose มีวิธีขยายระดับที่ต่ำลงเล็กน้อยสําหรับ LazyPagingItems ใน itemKey และ itemContentType API เหล่านี้มุ่งเน้นที่จะช่วยคุณในการใช้พารามิเตอร์ key และ contentType กับ API มาตรฐาน items ที่มีอยู่แล้วสำหรับ LazyColumn, LazyVerticalGrid รวมถึง API ที่เทียบเท่าใน 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 Loading ทั้งหมดเป็นปัจจัยสำคัญสำหรับผู้ใช้ที่ใช้การเขียนหน้าเพจนับจากนี้ไป ด้วยเหตุนี้ ระบบจึงเลิกใช้งานส่วนขยายที่มีอยู่ไปยัง LazyListScope (I0c459, I92c8f, b/276989796)

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

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

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

  • การสร้างหน้าเพจได้อัปเดตทรัพยากร Dependency จาก 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 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • ขณะนี้การแบ่งหน้าจะสร้างบันทึกผ่านคลาส 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 มีคอมมิตเหล่านี้

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

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

ความเข้ากันได้กับการเขียน

  • 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 เวอร์ชัน 12 แล้ว

เวอร์ชัน 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() ลงใน LazyPagingItem ที่แสดงฟังก์ชันการทำงานเดียวกับที่มีใน 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 มีการผสานรวมระหว่าง The 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 ได้เลิกใช้งานไปเพื่อใช้ API ของ Paging 3 ใหม่ ซึ่งมีการปรับปรุงต่อไปนี้

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

เวอร์ชัน 3.0.0-rc01

21 เมษายน 2021

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

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

  • แก้ไขปัญหาที่บางครั้งการแบ่งหน้าจะไม่ส่งการดำเนินการแตกต่างกัน เหตุการณ์ใน 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 จนครบและทำให้หน้า "ติดอยู่"

เวอร์ชัน 3.0.0-beta01

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

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

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

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

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

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

เวอร์ชัน 3.0.0-alpha13

27 มกราคม 2021

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

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

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

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

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

เวอร์ชัน 3.0.0-alpha12

13 มกราคม 2021

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

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

  • LegalatingPagingSourceแฟกตอรี่ ไม่ใช่คลาส abstract อีกต่อไป เนื่องจากไม่เคยมีวิธีใดๆ ในนามธรรมเลย (I4a8c4)
  • เพิ่ม .cachedIn() โอเวอร์โหลดที่ยอมรับ ViewModel แทน Lifecycle หรือ CoroutineScope สำหรับผู้ใช้ Java (I97d81, b/175332619)
  • อนุญาตให้ผู้โทร Java ใช้การดำเนินการเปลี่ยนรูปแบบ PagingData ใน แบบไม่พร้อมกัน โดยการรับผู้ดำเนินการเป็นโอเปอเรเตอร์การแปลง อาร์กิวเมนต์ โอเปอเรเตอร์การแปลง -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 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

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

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

  • PagingSource.getRefreshKey() เป็น API ที่มีความเสถียรแล้ว (I22f6f, b/173530980)
  • PagingSource.invalidate ไม่ใช่ฟังก์ชันแบบเปิดอีกต่อไป หากคุณ ต้องได้รับการแจ้งเตือนเมื่อเกิดการใช้งานไม่ได้ โปรดพิจารณาเรียกใช้ RegisteratedCallback method แทนที่จะเป็นการลบล้าง เป็นโมฆะ (I628d9, b/173029013, b/137971356)
  • ขณะนี้เพจเจอร์มีตัวสร้างทดลองเพียงตัวเดียวควบคู่ไปกับ ถาวร โดยไม่ทำให้ 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

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

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

  • แก้ไขข้อขัดข้องเนื่องจาก IllegalStateException เมื่อ โดยใช้ตัวคั่นที่ตั้งค่า PagingConfig.maxSize (I0ed33, b/174787528)
  • แก้ไขข้อบกพร่องที่ทำให้สถานะการโหลดสำหรับ PREPEND / APPEND ไม่ อัปเดตเป็น NotLoading(endOfPaginationReached = true) ทันที หลังจากการโหลดครั้งแรกหากตั้งค่า RemoteMediator ไว้ (I8cf5a)
  • แก้ไขข้อบกพร่องที่ API ด้านผู้นำเสนอ เช่น .snapshot(), .peek() ฯลฯ จะแสดงรายการก่อนหน้า (ไม่อัปเดต) ภายในการอัปเดต ListUpdateCallback
  • แก้ไขข้อบกพร่องที่โอเปอเรเตอร์ตัวคั่นไม่เพิ่มส่วนหัวหรือส่วนท้ายเมื่อใช้กับ RemoteMediator
  • แก้ไขข้อบกพร่องที่การอัปเดต LoadState เป็น NotLoading สำหรับ RemoteMediator จะค้างที่สถานะ กำลังโหลด
  • แก้ไขข้อบกพร่องที่ .asPagingSourceFactory() ความเข้ากันได้ของ API ของ Paging2.0 อาจทำให้ระบบเริ่มต้น 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 ที่เลิกใช้งานแล้วออก เพราะซ้ำซ้อนกับการอัปเดต requestStateFlow / Listener สำหรับ ที่ย้ายข้อมูลทั้งหมด ค่าเทียบเท่าloadStateFlow คือ

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

    (Ib5570, b/173530908)

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

  • endOfPaginationReached สำหรับ RemoteMediator REFRESH แล้ว เผยแพร่ไปยังการอัปเดต LoadState อย่างถูกต้องและป้องกัน APPEND ระยะไกลและ PREPEND จากการทริกเกอร์ (I94a3f, b/155290248)
  • การนำเสนอรายการที่ว่างเปล่าเนื่องจากหน้าเริ่มต้นว่างเปล่าหรือ การกรองแบบเข้มงวดจะไม่ขัดขวางการเปิดหน้าด้วยการเปิด PREPEND อีกต่อไป หรือโหลด APPEND (I3e702, b/168169730)
  • แก้ไขปัญหาที่ getRefreshKey ไม่รับสาย PagingSource รุ่นต่อๆ มาเมื่อการโมฆะเกิดขึ้นอย่างรวดเร็ว (I45460, b/170027530)

การสนับสนุนภายนอก

  • เพิ่มคลาส Abstract ใหม่ตกแต่งอย่างจะได้รับเมื่อเข้าและออกจากโรงงานแล้ว ด้วย .invalidate() API ที่ส่งต่อมายัง PagingSources ทั้งหมด จะปล่อยออกมา ขอขอบคุณ @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 โดยสมบูรณ์ด้วย แทนที่ด้วยอนุประโยค (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-Conversions ใน Kotlin ผ่านฟังก์ชัน (พร้อมใช้งานใน Kotlin 1.4) การทำเช่นนี้ยังแก้ไขข้อบกพร่องที่ ไม่ได้เรียกตัวแปร kotlin ของ Callback ที่เป็นโมฆะหลังจากเปลี่ยนรูปแบบ โดย .map หรือ .mapByPage (I1f244, b/165313046)

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

  • การโต้ตอบในการแบ่งหน้ากับ ViewPager ดีขึ้นอย่างมาก กล่าวอย่างเจาะจงคือ การแบ่งหน้าจะไม่ยกเลิกการโทรหา RemoteMediator#load อีกต่อไปเนื่องจากหน้าเว็บใช้งานไม่ได้ นอกจากนี้ จะทำให้คำขอโหลดต่อท้าย/เพิ่มไว้ข้างหน้าหากจำเป็นต้องรีเฟรชไม่ได้อีกต่อไป จนกว่าคำขอ "รีเฟรช" จะเสร็จสมบูรณ์ (I6390b, b/162252536)
  • เปิดใช้การตรวจสอบ Lint ของ API สำหรับ MissingGetterMatchingBuilder ใน androidx (I4bbea, b/138602561)
  • แก้ไขข้อบกพร่องที่ผู้ช่วย ConcatAdapter .withLoadState* รายจะ ข้อขัดข้องเนื่องจากแจ้งเตือน 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 ยอมรับโอเปอเรเตอร์แล้ว เป็นพารามิเตอร์ เพื่อควบคุมบริบทการดำเนินการ (รหัส 4372)

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

  • แก้ไขข้อยกเว้น IndexOutOfBounds ใน RemoteMediator ครบกำหนดแล้ว กับภาวะแข่งขัน (I00b7f, b/165821814)
  • แก้ไขเงื่อนไขการแข่งขันในแหล่งข้อมูล -> Conversion ของ PagingSource ที่อาจทําให้ PagingSource ผลลัพธ์ไม่สนใจสัญญาณการทําให้ไม่ถูกต้องจากแหล่งข้อมูล
  • แก้ไขปัญหาในตรรกะการดึงข้อมูลหน้าเว็บซึ่งบางครั้งอาจทำให้ไม่สามารถรับ PagingSource ใหม่ได้จนกว่าจะเรียกใช้ PagingDataAdapter.refresh()
  • แก้ไขปัญหาที่ทำให้ตำแหน่งของการเลื่อนหายไปในบางครั้งเมื่อใช้ DataSource ที่แปลงเป็น PagingSource (เช่น ที่ผลิตโดยห้อง) ร่วมกับ 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 โดยมีข้อความชัดเจนขึ้น ขาดการสนับสนุน ID ที่เสถียรแล้ว เมื่อใดก็ตามที่ มีการเรียก PagingDataAdapter.setHasStableIds (Ib3890, b/158801427)

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

  • เครื่องหมายแทรกตัวคั่นไม่กรองหน้าว่างออกซึ่งจะทำให้ ดึงข้อมูลระยะห่างเพื่อให้ผู้นำเสนอทำได้ล่วงหน้าแม้ในกรณีที่ หน้าว่างจำนวนมากแทรกอยู่ (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 เพื่อแสดงรายการคงที่ในบางสถานะ เช่น ก่อนหน้า การรีเฟรชเริ่มต้นเสร็จสิ้นหรือเพียงเพื่อทดสอบการเปลี่ยนรูปแบบ (รหัส134d)
  • เลิกใช้งาน dataRefresh Flow / Listener API ตามเดิม มีวัตถุประสงค์เพื่อแสดงสถานะรายการที่แสดงใน REFRESH แต่ด้วยการปรับปรุงเวลาของการโหลดสถานะ / เวลาเรียกกลับของ Listener และพร็อพเพอร์ตี้ itemCount มีความซ้ำซ้อน (Ia19f3)
  • เพิ่ม Wrapper ของความเข้ากันได้ RxJava3 สำหรับ PagingSource และ RemoteMediator (I49ef3, b/161480176)

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

  • แปลง PositionalDataSource เป็น PagingSource แล้วผ่าน ผู้ช่วย toPagingSourceFactory คน รวมถึง PagingSource ที่สร้างโดยห้อง ให้ทำเครื่องหมายตัวเองอย่างถูกต้อง เพื่อสนับสนุนการกระโดด (I3e84c, b/162161201)
  • แก้ไขข้อบกพร่องที่ใช้รูปแบบซิงโครนัสของ sendData บางครั้งจะนำไปสู่การแข่งขันที่ทำให้เกิด 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 แหล่งข้อมูลจาก Java ไปยัง แก้ความกำกวมระหว่างตัวแปรเดิมกับ Kotlin (If7b23, b/161150011)
  • API ซ้ำซ้อนที่มีไว้เพื่ออำนวยความสะดวกแก่ผู้ใช้ Kotlin ถูกทำเครื่องหมายว่า @JvmSynthetic (I56ae5)
  • เพิ่มโอเวอร์โหลดสำหรับตัวสร้างของ LoadResult.Page ซึ่งมีค่าเริ่มต้นเป็น items before และ itemsAfter เป็น COUNT_UNDEFINED (I47849)
  • กำหนดให้โอเปอเรเตอร์ PagingData ที่มีอยู่ยอมรับวิธีการระงับ และเปิดตัว MapSync, FlatMapSync และ filterSync แบบไม่มีการระงับ สำหรับผู้ใช้ Java วิธีการเปลี่ยนรูปแบบที่มีอยู่ ย้ายไปยังฟังก์ชันส่วนขยาย เพื่อให้ผู้ใช้ Kotlin ต้องนำเข้าฟังก์ชันเหล่านั้น (I34239, b/159983232)

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

  • ขณะนี้ PagingSources ของ Room (และ PositionalDataSource) แสดงตัวคั่นนำหน้าโดยเป็นส่วนหนึ่งของหน้าแรก ดังนั้นผู้ใช้ ก็ไม่ต้องเลื่อนหน้าจอ (I6f747, b/160257628)
  • สิทธิ์เข้าถึงรายการในตัวยึดตำแหน่งตอนนี้ เรียกใช้ PagingSource ได้อย่างถูกต้องจนกว่า หน้าเว็บแสดงค่าดัชนีที่ขอ หลังจากเปลี่ยนรูปแบบโดย PagingData.filter() (I95625, b/158763195)
  • แก้ไขข้อบกพร่องที่บางครั้งเลื่อนตาม PagingSource แสดงผลข้อผิดพลาด ไม่สามารถทำให้ PagingDataAdapter.retry() ไม่ให้ลองอีกครั้ง (I1084f, b/160194384)
  • แก้ไขปัญหาการเข้าถึงรายการหลังจากยกเลิกหน้า ไม่โหลดหน้าเว็บแม้ว่าการเข้าถึงรายการจะอยู่ในการดึงข้อมูลล่วงหน้า (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)
  • เพิ่ม RxJava และ Guava API สำหรับ RemoteMediator - RxRemoteMediator และ ListenableFutureRemoteMediator
  • เพิ่มตัวช่วยไปยัง PagingState สำหรับการเข้าถึงรายการทั่วไป เช่น isEmpty() และ firstItemOrNull() (I3b5b6, b/158892717)

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

  • ตอนนี้เพจเจอร์จะตรวจสอบการใช้ PagingSource ซ้ำในโรงงาน เพื่อป้องกันการใช้ PagingSources ที่ไม่ถูกต้องโดยไม่ตั้งใจ ซึ่งทําให้เกิดข้อผิดพลาดที่ไม่ชัดเจน (I99809, b/158486430)
  • ความล้มเหลวจาก RemoteMediator REFRESH จะไม่ขัดขวาง 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 มีคอมมิตเหล่านี้

ไลบรารีการสร้างหน้าเว็บอัปเดตเป็นเวอร์ชัน 3.0 แล้วเพื่อให้สามารถเปิดใช้งานฟีเจอร์ใหม่หลักๆ ได้มากมาย

ฟีเจอร์ใหม่ของ 3.0

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

  • หน้า 3 Javadocs ยังไม่พร้อมใช้งาน ในระหว่างนี้ โปรดใช้คำแนะนำที่ลิงก์ด้านบนหรือเอกสาร 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 เผยแพร่อย่างไม่ถูกต้องจาก Branch ที่กำหนดค่าไม่ถูกต้อง โดยเผยให้เห็น 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

หน้า 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

เผยแพร่การแบ่งหน้า 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 ที่ตามมา ให้ใส่ทรัพยากร Dependency ต่อไปนี้

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

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

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

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

RxJava2 เวอร์ชัน 1.0.0

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

16 พฤษภาคม 2018

การแบ่งหน้า 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 มีค่าสูงมาก

การสนับสนุน Alpha RxJava2 สำหรับการแบ่งหน้าเผยแพร่เป็นโมดูลที่ไม่บังคับแยกต่างหาก (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 เริ่มต้นของตัวดำเนินการที่ระบุ แทนพูลเทรด IO ของคอมโพเนนต์ Arch

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

เวอร์ชัน 1.0.0-alpha7

21 มีนาคม 2018

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

เราวางแผนว่าจะแบ่งหน้า alpha7 เป็นรุ่นสุดท้ายก่อนที่จะเปิดตัว Paging Hit เวอร์ชันเบต้า

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

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

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

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

เวอร์ชัน 1.0.0-alpha5

22 มกราคม 2018

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

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