การแบ่งหน้า

ไลบรารีการแบ่งหน้าช่วยให้คุณโหลดข้อมูลทีละน้อยอย่างราบรื่นภายใน RecyclerView ของแอปได้ง่ายขึ้น

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

อาร์ติแฟกต์ รุ่นที่เสถียร รุ่นที่อาจได้รับการเผยแพร่ รุ่นเบต้า เวอร์ชันอัลฟ่า
paging-* 3.3.5 - - -
paging-compose 3.3.5 - - -
ไลบรารีนี้อัปเดตล่าสุดเมื่อวันที่ 11 ธันวาคม 2024

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

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

เพิ่มการอ้างอิงสำหรับอาร์ติแฟกต์ที่ต้องการในไฟล์ 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

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

ความคิดเห็น

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

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

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

เวอร์ชัน 3.3

เวอร์ชัน 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 ภายในหรือ AsyncPagingDataDiffer ของ paging-runtime
  • เพิ่มเมธอดตัวช่วย LoadStates และ CombinedLoadStates ใหม่ใน hasError และ isIdle เพื่อตรวจสอบว่า LoadStates อยู่ในสถานะข้อผิดพลาดหรือ NotLoading หรือไม่ตามลำดับ นอกจากนี้ ยังเพิ่มawaitNotLoading()เมธอดส่วนขยาย Kotlin ใหม่ใน 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

  • ตอนนี้การแบ่งหน้าใช้คำอธิบายประกอบ @MainThread ของ AndroidX Annotation สำหรับโค้ดทั่วไป (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) overload) วิธีแก้ปัญหานี้ใช้ได้กับเวิร์กโฟลว์ที่ทําได้ (เช่น 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 Compose ตรงกับอาร์ติแฟกต์ Paging อื่นๆ ทั้งหมด การเปลี่ยนแปลงตั้งแต่เวอร์ชัน 3.1.0 มีดังนี้
    • รองรับการแสดงตัวอย่างรายการข้อมูลจำลองโดยการสร้าง PagingData.from(fakeData) และรวม PagingData นั้นไว้ใน MutableStateFlow (เช่น MutableStateFlow(PagingData.from(listOf(1, 2, 3)))) ส่งขั้นตอนนี้ไปยังคอมโพสิเบิล @Preview ในฐานะผู้รับเพื่อให้ collectAsLazyPagingItems() แสดงตัวอย่าง
    • รองรับเลย์เอาต์แบบ Lazy ทั้งหมด เช่น LazyVerticalGrid และ HorizontalPager รวมถึงคอมโพเนนต์ Lazy ที่กําหนดเองจากไลบรารี Wear และทีวี ซึ่งทำได้ผ่านเมธอดส่วนขยาย 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] ซึ่งมีผลกับทั้งการแบ่งหน้าด้วยมุมมองหรือการแบ่งหน้าด้วยเครื่องมือเขียน
  • เพิ่มคอนสตรคเตอร์สําหรับ PagingDataAdapter และ AsyncPagingDataDiffer ซึ่งยอมรับ CoroutineContext แทน CoroutineDispatcher
  • เพิ่มPagingSourceFactoryอินเทอร์เฟซแบบฟังก์ชันใหม่ซึ่งแสดงอินเทอร์เฟซ API ที่ชัดเจนกว่า Lambda ของ () -> PagingSource ก่อนหน้านี้ โรงงานนี้สามารถใช้เพื่อสร้างอินสแตนซ์ของ Pager ได้

เวอร์ชัน 3.2.0-rc01

21 มิถุนายน 2023

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

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

  • ขอขอบคุณ Veyndan ที่ช่วยในการย้ายการแบ่งออกเป็นส่วนๆ ออกจาก Android/JVM (#553, #554, #555, #559)

เวอร์ชัน 3.2.0-beta01

7 มิถุนายน 2023

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

การเขียนแบบแบ่งหน้า

  • คอมโพสิชันแบบแบ่งหน้ามีความเสถียรของ 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)
  • เพิ่ม paging-testing API ใหม่ของ List<Value>.asPagingSourceFactory() เพื่อรับ 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 ซึ่งจะแสดงผลลัพธ์เป็น Factory ที่นํากลับมาใช้ใหม่ได้สําหรับการสร้างอินสแตนซ์ 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>> แต่ละรายการที่ส่งออกจากโฟลว์แสดงถึงการสร้างข้อมูลแบบแบ่งหน้า วิธีนี้ช่วยให้การทดสอบการแบ่งหน้าในรายการต่างๆ เช่น การเปลี่ยนรูปแบบ 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 ช่วยให้คุณจําลอง 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 และ UI จริงที่ปกติแล้วต้องใช้เพื่อจําลองการผสานรวมการแบ่งหน้าจากต้นทางถึงปลายทาง

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

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

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

  • เปิดใช้การทำซ้ำที่สะดวกใน LoadResult.Page.data ถึง LoadResult.Page.iterator() ซึ่งจะอนุญาตการใช้เมธอด flatten ของไลบรารีมาตรฐาน Kotlin โดยอ้อมเมื่อได้รับ 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 อย่างถูกต้องแล้ว ในกรณีที่จะแสดงผลลัพธ์เป็นค่าว่าง แต่มีการตั้งค่า initialKey ที่ไม่ว่าง (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 จาก Paging จะรอค่าที่ถูกต้องจากทั้ง PagingSource และ RemoteMediator ก่อนส่งออกไปยังดาวน์สตรีม ตอนนี้ PagingData รุ่นใหม่จะเริ่มต้นด้วย Loading สำหรับสถานะการรีเฟรชอย่างถูกต้องเสมอ แทนที่จะรีเซ็ตเป็น NotLoading อย่างไม่ถูกต้องในบางกรณี
    • .loadStateFlow และ .addLoadStateListener ใน API ของผู้ให้บริการจะไม่ได้ส่ง CombinedLoadStates เริ่มต้นซ้ำอีกต่อไปซึ่งตั้งค่าสถานะสื่อกลางเป็น null เสมอ
  • การยกเลิกในรุ่นที่ผ่านมาตอนนี้เกิดขึ้นอย่างรวดเร็วเมื่อมีการทำให้โมเดลใช้งานไม่ได้ / รุ่นใหม่ คุณไม่จำเป็นต้องใช้ .collectLatest ใน Flow<PagingData> อีกต่อไป แต่เรายังคงแนะนำให้ใช้
  • เพิ่ม PagingSource.LoadResult.Invalid เป็นประเภทผลลัพธ์ใหม่จาก PagingSource.load ซึ่งทําให้การแบ่งหน้าทิ้งคําขอโหลดที่รอดําเนินการหรือที่จะเกิดขึ้นในอนาคตสําหรับ PagingSource นี้และทำให้ PagingSource ดังกล่าวใช้งานไม่ได้ ประเภทผลลัพธ์นี้ออกแบบมาเพื่อจัดการข้อมูลที่อาจไม่ถูกต้องหรือล้าสมัยซึ่งอาจแสดงผลจากฐานข้อมูลหรือเครือข่าย
  • เพิ่ม API ของโปรแกรมนำเสนอ .onPagesPresented และ .addOnPagesUpdatedListener ซึ่งจะทริกเกอร์พร้อมกันเมื่อแสดงหน้าใน UI การอัปเดตหน้าเว็บอาจเกิดขึ้นในสถานการณ์ต่อไปนี้
    • การโหลดครั้งแรกของ PagingData รุ่นใหม่เสร็จสมบูรณ์ ไม่ว่ารุ่นใหม่จะมีการเปลี่ยนแปลงรายการที่แสดงหรือไม่ เช่น รายการใหม่จะเรียกใช้การเรียกกลับนี้แม้ว่าจะโหลดครั้งแรกเสร็จสมบูรณ์โดยไม่มีการอัปเดตเนื่องจากรายการเหมือนกันทุกประการ
    • ระบบจะแทรกหน้าเว็บ แม้ว่าหน้าเว็บที่แทรกจะไม่มีรายการใหม่ก็ตาม
    • ระบบจะทิ้งหน้าเว็บแม้ว่าหน้านั้นจะไม่มีข้อมูล

เวอร์ชัน 3.1.0-rc01

3 พฤศจิกายน 2021

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

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

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

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

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

    1. ระบบจะป้อนข้อมูลสถานะสื่อกลางเสมอหากคุณใช้ RemoteMediator
    2. การลงทะเบียนตัวรับฟัง 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 อย่าง LoadResult.Invalid ลงใน PagingSource เมื่อ PagingSource.load แสดงผลเป็น PagingResult.Invalid การแบ่งหน้าจะทิ้งข้อมูลที่โหลดและทำให้ PagingSource เป็นโมฆะ ประเภทผลลัพธ์นี้ออกแบบมาเพื่อจัดการข้อมูลที่อาจไม่ถูกต้องหรือล้าสมัยซึ่งอาจแสดงผลจากฐานข้อมูลหรือเครือข่าย

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

    Paging2 API ที่ใช้ LivePagedList หรือ RxPagedList ยังรองรับประเภทผลลัพธ์นี้ด้วย เมื่อใช้ PagingSource กับ PagedList API ของ 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 ที่ไม่ถูกต้องอยู่แล้ว วิธีนี้ช่วยแก้ปัญหาการแย่งกันใช้ทรัพยากรซึ่งทําให้การแบ่งหน้าทิ้งสัญญาณการลบล้างและค้างเมื่อระบุแหล่งที่มาที่ไม่ถูกต้องอยู่แล้วระหว่างการโหลดครั้งแรก นอกจากนี้ ระบบจะนำการเรียกกลับที่ไม่ถูกต้องออกอย่างถูกต้องหลังจากทริกเกอร์แล้ว เนื่องจากมีการรับประกันว่าจะมีการเรียกใช้ไม่เกิน 1 ครั้ง (I27e69)
  • ส่งค่าเริ่มต้นของตัวยึดตําแหน่ง (InitialPagedList) จากสตรีม PagedList ที่สร้างขึ้นใหม่ เช่น LivePagedListBuilder หรือ RxPagedListBuilder จะไม่ล้างข้อมูลที่โหลดไว้ก่อนหน้านี้อีกต่อไป

เวอร์ชัน 3.1.0-alpha02

1 กรกฎาคม 2021

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

ฟีเจอร์ใหม่

  • เพิ่ม API ของ Listener และตัวแสดงขั้นตอนใน onPagesPresented ซึ่งจะทริกเกอร์ทันทีหลังจากหน้าเว็บที่แสดงได้รับการอัปเดตใน 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)

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

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

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

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

คอมโพสิชันแบบแบ่งหน้าเวอร์ชัน 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 ทั้งหมด

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

เราต้องสร้าง API ที่เลเยอร์อื่นเพื่อรองรับเลย์เอาต์แบบ Lazy เพิ่มเติม แทนที่จะให้บริการ items API ที่กําหนดเองสําหรับเลย์เอาต์แบบ Lazy แต่ละรายการ ตอนนี้ Paging Compose มีเมธอดส่วนขยายระดับต่ำกว่าเล็กน้อยใน LazyPagingItems ใน itemKey และ itemContentType API เหล่านี้มุ่งเน้นที่จะช่วยให้คุณใช้พารามิเตอร์ key และ contentType กับ items API มาตรฐานที่มีอยู่แล้วสําหรับ 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

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

การอัปเดตทรัพยากร Dependency

  • 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 มีการคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • ตอนนี้การแบ่งหน้าจะแสดงบันทึกผ่านคลาส 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 และ item getter ของ 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 เวอร์ชันอัลฟ่า 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 ให้การผสานรวมระหว่าง ไลบรารีการแบ่งหน้ากับ 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 มีการคอมมิตเหล่านี้

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

  • แก้ไขปัญหาที่บางครั้งการแบ่งหน้าจะส่งเหตุการณ์ที่ไม่มีการดําเนินการไปยัง RecyclerView ซึ่งอาจทําให้ตัวรับฟังบางอย่างทริกเกอร์ก่อนเวลาอันควร (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 ของ DataSource v2 ผ่านเส้นทางความเข้ากันได้
  • ตอนนี้การเรียก 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 ไม่ใช่คลาสนามธรรมอีกต่อไปเนื่องจากไม่เคยมีเมธอดนามธรรม (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 มีการคอมมิตเหล่านี้

ฟีเจอร์ใหม่

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

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

  • PagingSource.getRefreshKey() เป็น API เวอร์ชันเสถียรแล้ว (I22f6f, b/173530980)
  • PagingSource.invalidate ไม่ใช่ฟังก์ชันแบบเปิดอีกต่อไป หากต้องการรับการแจ้งเตือนเมื่อเกิดการลบล้าง ให้ลองเรียกใช้เมธอด registerInvalidatedCallback แทนการลบล้างการลบล้าง (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
  • แก้ไขข้อบกพร่องที่ .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 ที่เลิกใช้งานออกแล้วเนื่องจากมีการใช้งานซ้ำกับการอัปเดต loadStateFlow / 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)

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

  • เพิ่มคลาสนามธรรมใหม่ 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 (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 ของคอลแบ็กที่ลบล้างหลังจากเปลี่ยนรูปแบบโดย .map หรือ .mapByPage ด้วย (I1f244, b/165313046)

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

  • การโต้ตอบของการจัดเรียงหน้าเว็บกับ ViewPager ได้รับการปรับปรุงอย่างมาก กล่าวโดยละเอียดคือ Paging จะไม่ยกเลิกการเรียก 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

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

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

  • แก้ไขข้อยกเว้น IndexOutOfBounds ที่แสดงใน RemoteMediator เนื่องจากเงื่อนไขการแข่งขัน (I00b7f, b/165821814)
  • แก้ไขเงื่อนไขการแข่งขันในการแปลง 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 ทำให้ API นี้ซ้ำซ้อน (Ia19f3)
  • เพิ่ม Wrapper ที่เข้ากันได้กับ RxJava3 สําหรับ PagingSource และ RemoteMediator (I49ef3, b/161480176)

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

  • PositionalDataSource ที่แปลงเป็น PagingSource ผ่านตัวช่วย toPagingSourceFactory รวมถึง 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 ของ DataSource จาก 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)
  • เพิ่ม RxJava และ Guava API สําหรับ RemoteMediator - RxRemoteMediator และ ListenableFutureRemoteMediator
  • เพิ่มตัวช่วยลงใน PagingState สำหรับการเข้าถึงรายการทั่วไป เช่น isEmpty() และ firstItemOrNull() (I3b5b6, b/158892717)

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

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

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

  • ยังไม่มี Javadoc ของหน้าเว็บ 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

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

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 เพื่อความมั่นคง Paging 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 นั้นสูงมาก

การรองรับ 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 Components

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

เวอร์ชัน 1.0.0-alpha7

21 มีนาคม 2018

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

Paging alpha7 มีกำหนดเป็นรุ่นสุดท้ายก่อน Paging จะเข้าสู่รุ่นเบต้า

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

  • ตอนนี้ออบเจ็กต์ DataSource.LoadParams มีคอนสตรัคเตอร์แบบสาธารณะ และออบเจ็กต์ DataSource.LoadCallback เป็นแบบนามธรรม ซึ่งช่วยให้สามารถรวม DataSource หรือทดสอบ DataSource โดยตรงด้วยการเรียกกลับจำลองได้ b/72600421
  • ตัวแมปสําหรับ 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 เป็นเวอร์ชันสุดท้ายแล้ว 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