การแบ่งหน้า
ตารางนี้แสดงอาร์ติแฟกต์ทั้งหมดในกลุ่ม androidx.paging
| อาร์ติแฟกต์ | รุ่นที่เสถียร | รุ่นที่อาจได้รับการเผยแพร่ | รุ่นเบต้า | รุ่นอัลฟ่า |
|---|---|---|---|---|
| paging-* | 3.3.6 | 3.4.0-rc01 | - | - |
| paging-compose | 3.3.6 | 3.4.0-rc01 | - | - |
การประกาศทรัพยากร Dependency
หากต้องการเพิ่มทรัพยากร Dependency ใน Paging คุณต้องเพิ่มที่เก็บ Maven ของ Google ลงในโปรเจ็กต์ อ่านข้อมูลเพิ่มเติมได้ที่ที่เก็บ Maven ของ Google
เพิ่มทรัพยากร Dependency สำหรับอาร์ติแฟกต์ที่ต้องการในไฟล์ build.gradle สำหรับ
แอปหรือโมดูล
Groovy
dependencies { def paging_version = "3.3.6" implementation "androidx.paging:paging-runtime:$paging_version" // alternatively - without Android dependencies for tests testImplementation "androidx.paging:paging-common:$paging_version" // optional - RxJava2 support implementation "androidx.paging:paging-rxjava2:$paging_version" // optional - RxJava3 support implementation "androidx.paging:paging-rxjava3:$paging_version" // optional - Guava ListenableFuture support implementation "androidx.paging:paging-guava:$paging_version" // optional - Jetpack Compose integration implementation "androidx.paging:paging-compose:3.4.0-rc01" }
Kotlin
dependencies { val paging_version = "3.3.6" implementation("androidx.paging:paging-runtime:$paging_version") // alternatively - without Android dependencies for tests testImplementation("androidx.paging:paging-common:$paging_version") // optional - RxJava2 support implementation("androidx.paging:paging-rxjava2:$paging_version") // optional - RxJava3 support implementation("androidx.paging:paging-rxjava3:$paging_version") // optional - Guava ListenableFuture support implementation("androidx.paging:paging-guava:$paging_version") // optional - Jetpack Compose integration implementation("androidx.paging:paging-compose:3.4.0-rc01") }
ดูข้อมูลเกี่ยวกับการใช้ส่วนขยาย Kotlin ได้ที่เอกสารประกอบ KTX
ดูข้อมูลเพิ่มเติมเกี่ยวกับการพึ่งพาได้ที่เพิ่มการพึ่งพาบิลด์
ความคิดเห็น
ความคิดเห็นของคุณช่วยให้ Jetpack ทำงานได้ดีขึ้น โปรดแจ้งให้เราทราบหากพบปัญหาใหม่หรือมี ไอเดียในการปรับปรุงไลบรารีนี้ โปรดดูปัญหาที่มีอยู่ ในไลบรารีนี้ก่อนสร้างปัญหาใหม่ คุณสามารถโหวตปัญหาที่มีอยู่ได้โดย คลิกปุ่มดาว
ดูข้อมูลเพิ่มเติมได้ในเอกสารประกอบของเครื่องมือติดตามปัญหา
เวอร์ชัน 3.4
เวอร์ชัน 3.4.0-rc01
14 มกราคม 2026
ระบบจะถอนการอ้างสิทธิ์androidx.paging:paging-*:3.4.0-rc01 เวอร์ชัน 3.4.0-rc01 มีการเปลี่ยนแปลงเหล่านี้
ฟีเจอร์ใหม่
- นำการรองรับแพลตฟอร์ม KMP ต่อไปนี้ออก ได้แก่
macosX64,iosX64,watchosX64และtvosX64เพื่อให้สอดคล้องกับการเลิกใช้งานเป้าหมาย macosX64 ของ Jetbrains (7cb9a4)
เวอร์ชัน 3.4.0-beta01
17 ธันวาคม 2025
ระบบจะถอนการอ้างสิทธิ์androidx.paging:paging-*:3.4.0-beta01 เวอร์ชัน 3.4.0-beta01 มีการเปลี่ยนแปลงเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขการแข่งขันระหว่างการโหลด
RecyclerViewและRefreshซึ่งทำให้เกิดIndexOutOfBoundsExceptionในRecyclerViewการอัปเดต UI ที่หยุดชะงักเนื่องจากโหลดRefreshอย่างต่อเนื่องอาจทำให้สถานะการแบ่งหน้าไม่ซิงค์กับRecyclerViewปัญหานี้ได้รับการแก้ไขโดยการรีเซ็ตการแบ่งหน้าเป็นสถานะก่อนการรีเฟรชหากการรีเฟรชถูกขัดจังหวะ (เช่น โดยการRefreshโหลดต่อเนื่อง) (I771b0, b/409809768)
เวอร์ชัน 3.4.0-alpha04
10 กันยายน 2025
ระบบจะถอนการอ้างสิทธิ์androidx.paging:paging-*:3.4.0-alpha04 เวอร์ชัน 3.4.0-alpha04 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- เพิ่ม
PagingStateAPIclosestItemAroundPositionใหม่เพื่อดึงข้อมูลรายการที่โหลดซึ่งอยู่ใกล้ตำแหน่งเป้าหมายมากที่สุดและตรงกับตัวบ่งชี้อินพุต ซึ่งใช้เพื่อสร้างคีย์รีเฟรชตามรายการได้ในกรณีที่รายการที่ยึดได้ในอุดมคติอยู่ใกล้ๆ แต่ไม่ได้อยู่ในตำแหน่งเป้าหมายที่แน่นอน (I96e5c, b/440187139)
เวอร์ชัน 3.4.0-alpha03
27 สิงหาคม 2025
ระบบจะถอนการอ้างสิทธิ์androidx.paging:paging-*:3.4.0-alpha03 เวอร์ชัน 3.4.0-alpha03 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- Paging-common ได้เพิ่มเดสก์ท็อปเป็นเป้าหมายใหม่ของ Kotlin Multiplatform (KMP) โดยรวมแล้วตอนนี้รองรับ JVM(Android และเดสก์ท็อป), Native (Linux, iOS, watchOS, tvOS, macOS, MinGW) และเว็บ (JavaScript, WasmJS) (Id2483, b/436884811)
- Paging-testing ได้เพิ่มเป้าหมาย Kotlin Multiplatform (KMP) ใหม่ โดยรวมแล้วตอนนี้รองรับ JVM(Android และเดสก์ท็อป), Native (Linux, iOS, watchOS, tvOS, macOS, MinGW) และเว็บ (JavaScript, WasmJS) (I0c543, b/435014650)
- Paging-compose ได้เพิ่มเป้าหมาย Kotlin Multiplatform (KMP) ใหม่ โดยรวมแล้วตอนนี้รองรับ JVM(Android และเดสก์ท็อป), Native (Linux, iOS, watchOS, tvOS, macOS, MinGW) และเว็บ (JavaScript, WasmJS) (I70d44, b/436884801)
การเปลี่ยนแปลง API
- ย้าย minSdk เริ่มต้นจาก API 21 ไปยัง API 23 (Ibdfca, b/380448311, b/435705964, b/435705223)
เวอร์ชัน 3.4.0-alpha02
30 กรกฎาคม 2025
ระบบจะถอนการอ้างสิทธิ์androidx.paging:paging-*:3.4.0-alpha02 เวอร์ชัน 3.4.0-alpha02 มีการเปลี่ยนแปลงเหล่านี้
การเปลี่ยนแปลง API
- ตอนนี้
PagingData.fromอนุญาตให้ตั้งค่าplaceholdersBeforeและplaceholdersAfterแล้ว โปรดทราบว่าการเลื่อนผ่านตัวยึดตำแหน่งเหล่านี้จะไม่ทำให้เกิดการโหลด (I06983)
เวอร์ชัน 3.4.0-alpha01
2 กรกฎาคม 2025
ระบบจะถอนการอ้างสิทธิ์androidx.paging:paging-*:3.4.0-alpha01 เวอร์ชัน 3.4.0-alpha01 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- Paging ได้เพิ่มเป้าหมาย KMP ต่อไปนี้ watchos, tvos, mingwX64, watchosDeviceArm64 และ linuxArm64 (I237dd, Ia62b3, b/368046982, Icf15d, b/364652024, I139d3, b/338268719)
การแก้ไขข้อบกพร่อง
- การทดสอบหน่วย Android ที่ดึงข้อมูลใน Paging 3.3 ขึ้นไปจะไม่เกิดข้อผิดพลาดจาก
PagingLoggerอีกต่อไป (Ia9400, b/331684448) - แก้ไขข้อบกพร่องที่ทำให้
RecyclerViewแสดงIndexOutOfBoundsExceptionเมื่อผู้ใช้เลื่อนขณะอัปเดตRecyclerView(Id1f16, b/381024738) - แก้ไขข้อบกพร่องที่การแบ่งหน้าไม่สามารถทริกเกอร์การโหลดเพิ่มเติมเมื่อรีเฟรชขณะเลื่อน (I60ca5, b/352586078)
- แก้ไขปัญหาการขัดข้องเมื่อเลื่อนขณะรีเฟรชรายการการแบ่งหน้า (I8c65a, b/347649763)
เวอร์ชัน 3.3
เวอร์ชัน 3.3.6
12 กุมภาพันธ์ 2025
ระบบจะถอนการอ้างสิทธิ์androidx.paging:paging-*:3.3.6 เวอร์ชัน 3.3.6 มีการเปลี่ยนแปลงเหล่านี้
การแก้ไขข้อบกพร่อง
- ตอนนี้ระบบจะจัดเก็บสัญญาณรีเฟรชและลองอีกครั้งที่ส่งระหว่างการรีเฟรชครั้งแรก และจะส่งอีกครั้งโดยอัตโนมัติเมื่อ Paging presenter พร้อม
การมีส่วนร่วมภายนอก
เวอร์ชัน 3.3.5
11 ธันวาคม 2024
ระบบจะถอนการอ้างสิทธิ์androidx.paging:paging-*:3.3.5 เวอร์ชัน 3.3.5 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขข้อบกพร่องที่ทำให้
RecyclerViewแสดงIndexOutOfBoundsExceptionเมื่อผู้ใช้เลื่อนขณะอัปเดตRecyclerView(Id1f16, b/381024738)
เวอร์ชัน 3.3.4
13 พฤศจิกายน 2024
ระบบจะถอนการอ้างสิทธิ์androidx.paging:paging-*:3.3.4 เวอร์ชัน 3.3.4 มีการเปลี่ยนแปลงเหล่านี้
การแก้ไขข้อบกพร่อง
- การทดสอบหน่วย Android ที่ดึงข้อมูลใน Paging 3.3 ขึ้นไปจะไม่แสดงข้อผิดพลาด เช่น
Method isLoggable in android.util.Log not mockedอีกต่อไป (Ia9400, b/331684448)
เวอร์ชัน 3.3.2
7 สิงหาคม 2024
ระบบจะถอนการอ้างสิทธิ์androidx.paging:paging-*:3.3.2 เวอร์ชัน 3.3.2 มีการเปลี่ยนแปลงเหล่านี้
ฟีเจอร์ใหม่
paging-commonและpaging-testingได้เพิ่มเป้าหมายใหม่แบบหลายแพลตฟอร์มของ Kotlin ได้แก่watchos,tvosและlinuxArm64(90c9768), (53e0eca)
เวอร์ชัน 3.3.1
24 กรกฎาคม 2024
ระบบจะถอนการอ้างสิทธิ์androidx.paging:paging-*:3.3.1 เวอร์ชัน 3.3.1 มีการเปลี่ยนแปลงเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่
AsyncPagingDataDifferหรือ API ที่สร้างขึ้นบนAsyncPagingDataDifferเช่นPagingDataAdapterที่ใช้กับRecyclerViewจะไม่สามารถทริกเกอร์การโหลดเพิ่มเติมเมื่อแหล่งข้อมูลสำรองรีเฟรชขณะเลื่อน (I60ca5, b/352586078) - แก้ไขข้อขัดข้องที่เกิดขึ้นเมื่อนำรายการออกจากแหล่งข้อมูลสำรองขณะเลื่อน
RecyclerViewโดยใช้PagingDataAdapterหรือAsyncPagingDataDiffer(I8c65a, b/347649763)
เวอร์ชัน 3.3.0
14 พฤษภาคม 2024
ระบบจะถอนการอ้างสิทธิ์androidx.paging:paging-*:3.3.0 เวอร์ชัน 3.3.0 มีการเปลี่ยนแปลงเหล่านี้
การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 3.2.0
- ตอนนี้
PagingDataPresenterเป็นชั้นเรียนสาธารณะแล้ว ตอนนี้คุณสามารถสร้างพรีเซนเตอร์แบบหลายแพลตฟอร์มบนPagingDataPresenterแทนที่จะต้องใช้ Paging API ภายในหรือpaging-runtimeของAsyncPagingDataDiffer - เพิ่มเมธอดตัวช่วย
LoadStatesและCombinedLoadStatesใหม่ในhasErrorและisIdleเพื่อตรวจสอบว่าLoadStatesอยู่ในสถานะข้อผิดพลาดหรือสถานะNotLoadingตามลำดับ นอกจากนี้ เรายังได้เพิ่มawaitNotLoading()เมธอดส่วนขยาย Kotlin ใหม่ในFlow<CombinedLoadStates>ซึ่งจะรอจนกว่าการโหลดจะเข้าสู่สถานะNotLoadingหรือสถานะข้อผิดพลาด PagingData.empty()จะส่งสถานะNotLoadingโดยค่าเริ่มต้น เว้นแต่จะมีการส่งLoadStatesที่กำหนดเองไปยังตัวสร้าง ซึ่งแตกต่างจากลักษณะการทำงานที่มีอยู่ซึ่งจะไม่ส่งLoadStatesเมื่อส่งไปยังPagingDataAdapterหรือจะส่งสถานะการโหลดเมื่อรวบรวมเป็นLazyPagingItemsเมื่อรวบรวมเป็นLazyPagingItemsตอนนี้ระบบจะแสดงรายการที่ว่างเปล่าทันทีเมื่อมีการเขียนครั้งแรก
ความเข้ากันได้ของ Kotlin Multiplatform
ตอนนี้ Paging ได้จัดส่งอาร์ติแฟกต์ที่เข้ากันได้กับ Kotlin Multiplatform แล้ว ซึ่งส่วนใหญ่เป็นผลงานที่อัปสตรีมจากโปรเจ็กต์ multiplatform-paging ของ CashApp
paging-commonได้ย้าย Paging 3 API ทั้งหมดไปที่commonและตอนนี้เข้ากันได้กับ jvm และ iOS นอกเหนือจาก Androidpaging-testingได้ย้ายโค้ดไปยังcommonและตอนนี้ใช้งานร่วมกับ jvm และ iOS ได้แล้ว นอกเหนือจาก Androidpaging-composeได้ย้ายโค้ดไปยังcommonและจัดส่งอาร์ติแฟกต์ Android ซึ่งตรงกับการรองรับหลายแพลตฟอร์มของandroidx.composepaging-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 ภายในหรือpaging-runtimeของAsyncPagingDataDiffer(Id1f74, b/315214786) - เพิ่มเมธอดตัวช่วยใหม่
LoadStatesและCombinedLoadStatesเพื่อตรวจสอบว่าLoadStatesอยู่ในสถานะข้อผิดพลาดหรือสถานะNotLoadingนอกจากนี้ ยังได้เพิ่ม API ใหม่ที่รอLoadStateFlowจนกว่าการโหลดจะเข้าสู่สถานะNotLoadingหรือสถานะข้อผิดพลาด (Id6c67)
การเปลี่ยนแปลงพฤติกรรม
PagingData.empty()จะส่งสถานะNotLoadingโดยค่าเริ่มต้น เว้นแต่จะมีการส่งLoadStatesที่กำหนดเองไปยังตัวสร้าง ซึ่งแตกต่างจากลักษณะการทำงานที่มีอยู่ซึ่งจะไม่ส่งLoadStatesเมื่อส่งไปยังPagingDataAdapterหรือจะส่งสถานะการโหลดเมื่อรวบรวมเป็นLazyPagingItemsเมื่อรวบรวมเป็นLazyPagingItemsตอนนี้ระบบจะแสดงรายการที่ว่างเปล่าทันทีเมื่อมีการเขียนครั้งแรก (I4d11d, b/301833847)
เวอร์ชัน 3.3.0-alpha02
20 กันยายน 2023
ระบบจะถอนการอ้างสิทธิ์androidx.paging:paging-*:3.3.0-alpha02 เวอร์ชัน 3.3.0-alpha02 มีคอมมิตเหล่านี้
ความเข้ากันได้ของ Kotlin Multiplatform
ตอนนี้ Paging ได้จัดส่งอาร์ติแฟกต์ที่เข้ากันได้กับ Kotlin Multiplatform แล้ว ซึ่งส่วนใหญ่เป็นผลงานที่อัปสตรีมจากโปรเจ็กต์ multiplatform-paging ของ CashApp ซึ่งจะช่วยให้เราหลีกเลี่ยงความแตกต่างระหว่างที่เก็บ 2 แห่งและทำให้ที่เก็บทั้ง 2 เข้ากันได้
paging-commonได้ย้าย Paging 3 API ทั้งหมดไปที่commonและตอนนี้เข้ากันได้กับ jvm และ iOS นอกเหนือจาก Androidpaging-testingได้ย้ายโค้ดไปยังcommonและตอนนี้ใช้งานร่วมกับ jvm และ iOS ได้แล้ว นอกเหนือจาก Androidpaging-composeได้ย้ายโค้ดไปยังcommonและจัดส่งอาร์ติแฟกต์ Android ซึ่งตรงกับการรองรับหลายแพลตฟอร์มของandroidx.composepaging-runtime,paging-guava,paging-rxjava2และpaging-rxjava3จะยังคงใช้ได้ใน Android เท่านั้น
การเปลี่ยนแปลง API
- อินเทอร์เฟซ Logger สาธารณะซึ่งมีไว้สำหรับการใช้งานภายในเท่านั้นถูกเลิกใช้งานแล้ว (I16e95, b/288623117)
การมีส่วนร่วมภายนอก
- ขอขอบคุณ veyndan จาก Cash App ที่ช่วยย้าย Paging ไปยัง Kotlin Multiplatform (#560, #561, #562, #573, #576, #577, #578, #579, #580, #581, #583, #584, #586, #609)
เวอร์ชัน 3.3.0-alpha01
20 กันยายน 2023
- นี่คือการเปิดตัวไลบรารี androidx.paging แบบหลายแพลตฟอร์มครั้งแรก เวอร์ชันนี้มีเฉพาะอาร์ติแฟกต์
*-jvmและ*-androidสำหรับตัวแปร macOS, iOS และ Linux ให้ใช้3.3.0-alpha02
เวอร์ชัน 3.2
เวอร์ชัน 3.2.1
6 กันยายน 2023
ระบบจะถอนการอ้างสิทธิ์androidx.paging:paging-*:3.2.1 เวอร์ชัน 3.2.1 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่
asSnapshot()API ของอาร์ติแฟกต์การทดสอบการแบ่งหน้าจะค้างเมื่อส่ง Flow ที่สร้างโดยใช้PagingData.from(List)เนื่องจากasSnapshot()จะไม่มีข้อมูลเกี่ยวกับเวลาที่การโหลดเสร็จสิ้น (ซึ่งแตกต่างจากPagingData.from(List, LoadStates)ที่โอเวอร์โหลด) วิธีแก้ปัญหานี้ใช้ได้กับโฟลว์ที่ทำเสร็จได้เท่านั้น (เช่นflowOf(PagingData.from(...))) สำหรับโฟลว์ที่ทำเสร็จไม่ได้ (เช่นMutableStateFlowให้ใช้โอเวอร์โหลดPagingData.fromที่ให้LoadStates) (I502c3) - ตอนนี้ Paging Compose ใช้
AndroidUiDispatcher.Mainภายในเพื่อให้แน่ใจว่าข้อมูลใหม่จะพร้อมใช้งานในเฟรมเดียวกันเมื่อโหลดเสร็จ (Ia55af)
เวอร์ชัน 3.2.0
26 กรกฎาคม 2023
ระบบจะถอนการอ้างสิทธิ์androidx.paging:paging-*:3.2.0 เวอร์ชัน 3.2.0 มีคอมมิตเหล่านี้
การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 3.1.0
- Paging Compose มีความเสถียรของ API และได้ผสานรวมกลับเข้าไปใน Paging ส่วนที่เหลือแล้ว โดยตอนนี้เวอร์ชันของ Paging Compose จะตรงกับอาร์ติแฟกต์ Paging อื่นๆ ทั้งหมด การเปลี่ยนแปลงตั้งแต่เวอร์ชัน 3.1.0 มีดังนี้
- รองรับการแสดงตัวอย่างรายการข้อมูลปลอมโดยการสร้าง
PagingData.from(fakeData)และห่อPagingDataนั้นในMutableStateFlow(เช่นMutableStateFlow(PagingData.from(listOf(1, 2, 3)))) ส่งโฟลว์นี้ไปยัง Composable ของ@Previewเป็นตัวรับสำหรับcollectAsLazyPagingItems()เพื่อแสดงตัวอย่าง - รองรับเลย์เอาต์แบบเลื่อนทั้งหมด เช่น
LazyVerticalGridและHorizontalPagerรวมถึงคอมโพเนนต์แบบเลื่อนที่กำหนดเองจากไลบรารี Wear และ TV ซึ่งทำได้ผ่านเมธอดส่วนขยายLazyPagingItemsระดับล่างใหม่itemKeyและitemContentTypeซึ่งช่วยให้คุณใช้พารามิเตอร์keyและcontentTypeกับ API มาตรฐานitemsที่มีอยู่แล้วสำหรับLazyColumn,LazyVerticalGridรวมถึงพารามิเตอร์ที่เทียบเท่าใน API เช่นHorizontalPager items(lazyPagingItems)และitemsIndexed(lazyPagingItems)ซึ่งรองรับเฉพาะLazyListScopeถูกเลิกใช้งานแล้ว
- รองรับการแสดงตัวอย่างรายการข้อมูลปลอมโดยการสร้าง
- อาร์ติแฟกต์
paging-testingใหม่ซึ่งมี API ที่ออกแบบมาเพื่อการทดสอบหน่วยของแต่ละเลเยอร์ในแอปและการผสานรวมกับ Paging โดยแยกกัน ตัวอย่างเช่น ข้อมูลต่อไปนี้TestPagerคลาสที่ช่วยให้คุณตรวจสอบลักษณะการทำงานของการติดตั้งใช้งานPagingSourceที่กำหนดเองได้โดยไม่ขึ้นอยู่กับ Pager และ UI จริง-
asPagingSourceFactoryAPI เพื่อแปลงFlow<List<Value>>หรือList<Value>แบบคงที่ให้เป็นPagingSourceFactoryที่ส่งไปยัง Pager ในการทดสอบได้ asSnapshotส่วนขยาย Kotlin ในFlow<PagingData<Value>>ซึ่งจะแปลFlow<PagingData<Value>>เป็นList<Value>โดยตรงasSnapshot lambdaช่วยให้คุณเลียนแบบ UI ของแอปผ่าน API เช่นscrollToหรือappendScrollWhileเพื่อให้คุณยืนยันได้ว่าสแนปชอตของข้อมูลถูกต้อง ณ จุดใดก็ตามในชุดข้อมูลที่แบ่งเป็นหน้า
- เพิ่มบันทึกเริ่มต้นเพื่อแสดงข้อมูลการแก้ไขข้อบกพร่องของการแบ่งหน้าใน 2 ระดับ ได้แก่
VERBOSEและDEBUGคุณเปิดใช้บันทึกได้โดยใช้คำสั่งadb shell setprop log.tag.Paging [DEBUG|VERBOSE]ซึ่งใช้ได้กับทั้งการแบ่งหน้าด้วย View หรือการแบ่งหน้าด้วย Compose - เพิ่มตัวสร้างสำหรับ
PagingDataAdapterและAsyncPagingDataDifferซึ่งยอมรับCoroutineContextแทนCoroutineDispatcher - เพิ่ม
PagingSourceFactoryอินเทอร์เฟซการทำงานใหม่ที่ให้พื้นผิว API ที่ชัดเจนกว่า Lambda ก่อนหน้า () ->PagingSourceคุณใช้ Factory นี้เพื่อสร้างอินสแตนซ์ของ Pager ได้
เวอร์ชัน 3.2.0-rc01
21 มิถุนายน 2023
ระบบจะถอนการอ้างสิทธิ์androidx.paging:paging-*:3.2.0-rc01 เวอร์ชัน 3.2.0-rc01 มีคอมมิตต่อไปนี้
การมีส่วนร่วมภายนอก
เวอร์ชัน 3.2.0-beta01
7 มิถุนายน 2023
ระบบจะถอนการอ้างสิทธิ์androidx.paging:paging-*:3.2.0-beta01 เวอร์ชัน 3.2.0-beta01 มีคอมมิตเหล่านี้
Paging Compose
- Paging Compose มีความเสถียรของ API อย่างเป็นทางการแล้ว ดังนั้น เราจึงอัปเดตเวอร์ชันจาก
1.0.0-alpha20ให้ตรงกับเวอร์ชันของอาร์ติแฟกต์การแบ่งหน้าอื่นๆ ทั้งหมด
การเปลี่ยนแปลง API
- นำ API
items(LazyPagingItems)และitemsIndexed(LazyPagingItems)ที่เลิกใช้งานแล้วออกจาก Paging Compose ดูตัวอย่าง API ที่ใช้แทนได้ในบันทึกประจำรุ่นของ Paging Compose1.0.0-alpha20(I9626e)
เวอร์ชัน 3.2.0-alpha06
24 พฤษภาคม 2023
ระบบจะถอนการอ้างสิทธิ์androidx.paging:paging-*:3.2.0-alpha06 เวอร์ชัน 3.2.0-alpha06 มีคอมมิตต่อไปนี้
ฟีเจอร์ใหม่
- เพิ่มอินเทอร์เฟซฟังก์ชันการทำงาน
PagingSourceFactoryใหม่ซึ่งมี API ที่ชัดเจนกว่า Lambda() -> PagingSourceที่มีอยู่ ใช้ Factory นี้เพื่อสร้างอินสแตนซ์ของPagerได้ (I33165, b/280655188) - เพิ่ม
paging-testingAPI ใหม่ของList<Value>.asPagingSourceFactory()เพื่อรับPagingSourceFactoryที่โหลดจากรายการข้อมูลที่ไม่เปลี่ยนแปลงเท่านั้น คุณยังคงควรใช้ส่วนขยายที่มีอยู่บนFlow<List<Value>>เพื่อทดสอบกับข้อมูลแบบคงที่หลายรุ่น (Id34d1, b/280655188)
การเปลี่ยนแปลง API
- ตอนนี้เราได้ใส่คำอธิบายประกอบ
@VisibleForTestingใน API สาธารณะทั้งหมดในการทดสอบการแบ่งหน้าเพื่อให้มั่นใจว่า API เหล่านี้จะใช้ในการทดสอบเท่านั้น (I7db6e) asSnapshotAPI ไม่จำเป็นต้องส่ง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)
การมีส่วนร่วมภายนอก
- ขอขอบคุณ Veyndan ที่ช่วยให้ Paging ไม่ต้องพึ่งพา Android/JVM อีกต่อไป (#525, #523, #520, #519, #507, #506, #505, #499, #497, #496, #493)
เวอร์ชัน 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>โดยตรงasSnapshotLambda ช่วยให้คุณจำลอง 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 valuesasSnapshotเป็นวิธีการ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()ได้อย่างสะดวก ซึ่งจะช่วยให้ใช้เมธอด Kotlin Standard Libraryflattenได้โดยอ้อมเมื่อได้รับ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 shelladb 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)
การมีส่วนร่วมภายนอก
- อัปเดต API :compose:ui:ui-test (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>.flowableAPI ไม่ใช่เวอร์ชันทดลองอีกต่อไป- การเปลี่ยนแปลงลักษณะการทำงานของ
LoadState- ตอนนี้
endOfPaginationReachedมีราคาfalseสำหรับLoadType.REFRESHสำหรับทั้งPagingSourceและRemoteMediator LoadStatesจากการแบ่งหน้าจะรอค่าที่ถูกต้องจากทั้งPagingSourceและRemoteMediatorก่อนที่จะปล่อยไปยังสตรีมปลายทาง ตอนนี้PagingDataรุ่นใหม่จะเริ่มต้นด้วยLoadingสำหรับสถานะรีเฟรชอย่างถูกต้องเสมอแทนที่จะรีเซ็ตเป็นNotLoadingอย่างไม่ถูกต้องในบางกรณี.loadStateFlowและ.addLoadStateListenerใน Presenter API จะไม่ส่งCombinedLoadStatesเริ่มต้นที่มีสถานะตัวกลางตั้งค่าเป็นnullซ้ำอีกต่อไป
- ตอนนี้
- การยกเลิกในรุ่นที่ผ่านมาจะเกิดขึ้นทันทีเมื่อมีการลบล้าง / สร้างใหม่ คุณไม่จำเป็นต้องใช้
.collectLatestในFlow<PagingData>อีกต่อไป แต่เรายังคงแนะนำให้ทำเช่นนั้น PagingSource.LoadResult.Invalidได้รับการเพิ่มเป็นประเภทการคืนค่าใหม่จากPagingSource.loadซึ่งทำให้ Paging ทิ้งคำขอโหลดที่รอดำเนินการหรือในอนาคตไปยังPagingSourceนี้และทำให้คำขอดังกล่าวไม่ถูกต้อง ประเภทการคืนค่านี้ออกแบบมาเพื่อจัดการข้อมูลที่อาจไม่ถูกต้องหรือล้าสมัยซึ่งอาจส่งคืนจากฐานข้อมูลหรือเครือข่าย- เพิ่ม API ของ
.onPagesPresentedและ.addOnPagesUpdatedListenerผู้นำเสนอซึ่งทริกเกอร์พร้อมกันเมื่อมีการนำเสนอหน้าต่างๆ ใน UI การอัปเดตหน้าเว็บอาจเกิดขึ้นในสถานการณ์ต่อไปนี้- การโหลด PagingData รุ่นใหม่ครั้งแรกเสร็จสมบูรณ์ ไม่ว่ารุ่นใหม่จะมีรายการที่แสดงที่มีการเปลี่ยนแปลงหรือไม่ก็ตาม เช่น รุ่นใหม่ที่โหลดครั้งแรกโดยไม่มีการอัปเดตเนื่องจากรายการเหมือนกันทุกประการจะยังคงทริกเกอร์การเรียกกลับนี้
- ระบบจะแทรกหน้า แม้ว่าหน้าเว็บที่แทรกจะไม่มีรายการใหม่ก็ตาม
- ระบบจะทิ้งหน้าเว็บ แม้ว่าหน้าเว็บที่ทิ้งจะว่างเปล่าก็ตาม
เวอร์ชัน 3.1.0-rc01
3 พฤศจิกายน 2021
ระบบจะถอนการอ้างสิทธิ์androidx.paging:paging-*:3.1.0-rc01 เวอร์ชัน 3.1.0-rc01 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไข Race Condition + Memory Leak ใน .cachedIn() ในกรณีที่ Paging ส่งเหตุการณ์การโหลดหลายรายการไปยังดาวน์สตรีมในขณะที่ไม่มี Observer หรือระหว่างที่ Observer เปลี่ยนไปใช้ PagingData ใหม่ (Ib682e)
เวอร์ชัน 3.1.0-beta01
13 ตุลาคม 2021
ระบบจะถอนการอ้างสิทธิ์androidx.paging:paging-*:3.1.0-beta01 เวอร์ชัน 3.1.0-beta01 มีคอมมิตต่อไปนี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่การเข้าถึงรายการอย่างรวดเร็วหลายครั้งอาจทำให้ระบบไม่พิจารณารายการเหล่านั้นใน prefetchDistance ซึ่งทำให้การโหลดหน้าเว็บหยุดชะงัก ปัญหานี้จะเกิดขึ้นโดยเฉพาะเมื่อมีการวางไอเทมจำนวนมากพร้อมกันในลำดับที่ให้ความสำคัญกับการโหลดตามทิศทางการเลื่อนของผู้ใช้ ตอนนี้ระบบจะบัฟเฟอร์การเข้าถึงรายการเหล่านี้และจัดลำดับความสำคัญแบบซิงโครนัสเพื่อป้องกันไม่ให้รายการหลุด (aosp/1833273)
เวอร์ชัน 3.1.0-alpha04
29 กันยายน 2021
ระบบจะถอนการอ้างสิทธิ์androidx.paging:paging-*:3.1.0-alpha04 เวอร์ชัน 3.1.0-alpha04 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- API ของ
Flow<PagingData>.observableและFlow<PagingData>.flowableไม่ใช่เวอร์ชันทดลองอีกต่อไป (Ie0bdd)
การแก้ไขข้อบกพร่อง
- สำหรับ LoadStates ตอนนี้
endOfPaginationReachedจะเป็นfalseสำหรับLoadType.REFRESHเสมอ ก่อนหน้านี้trueendOfPaginationReachedREFRESHจะเป็นจริงได้สำหรับ RemoteMediator แต่ไม่ใช่สำหรับ PagingSource ตอนนี้ลักษณะการทำงานนี้รวมกันเพื่อให้แสดงผลfalseเสมอ เนื่องจากไม่สมเหตุสมผลที่ REFRESH จะเป็นเทอร์มินัล และตอนนี้ได้ บันทึกเป็นส่วนหนึ่งของสัญญา API ใน LoadStates แล้ว เมื่อตัดสินใจว่าจะสิ้นสุดการแบ่งหน้าหรือไม่ คุณควรพิจารณาโดยอิงตามทิศทาง APPEND หรือ PREPEND เสมอ (I047b6) ตอนนี้ LoadStates จากการแบ่งหน้าจะรอค่าที่ถูกต้องจากทั้ง PagingSource และ RemoteMediator ก่อนที่จะปล่อยค่าไปยังสตรีมดาวน์สตรีมระหว่างการสร้าง ซึ่งจะป้องกันไม่ให้ PagingData รุ่นใหม่ส่ง NotLoading ใน CombinedLoadStates.source.refresh หากเป็น Loading อยู่แล้ว ตอนนี้ PagingData รุ่นใหม่จะเริ่มต้นด้วย Loading สำหรับสถานะการรีเฟรชอย่างถูกต้องเสมอ แทนที่จะรีเซ็ตเป็น NotLoading อย่างไม่ถูกต้องในบางกรณี
การยกเลิกในรุ่นก่อนหน้าจะเกิดขึ้นทันทีเมื่อมีการยกเลิก/สร้างรุ่นใหม่ คุณไม่จำเป็นต้องใช้ .collectLatest ใน
Flow<PagingData>อีกต่อไป แม้ว่าเราจะยังคงแนะนำให้ทำเช่นนั้นก็ตาม (I0b2b5, b/177351336, b/195028524).loadStateFlowและ.addLoadStateListenerใน API ของพรีเซนเตอร์ จะไม่ส่งCombinedLoadStatesเริ่มต้นที่ตั้งค่าสถานะตัวกลางเป็นnullและตั้งค่าสถานะแหล่งที่มาเป็นNotLoading(endOfPaginationReached = false)อีกต่อไป ซึ่งหมายความว่า- ระบบจะป้อนข้อมูลสถานะตัวกลางเสมอหากคุณใช้ RemoteMediator
- การลงทะเบียนเครื่องมือฟัง loadState ใหม่หรือตัวรวบรวมใหม่ใน
.loadStateFlowจะไม่ปล่อยค่าปัจจุบันในทันทีอีกต่อไป หากยังไม่ได้รับCombinedLoadStatesจริงจากPagingDataซึ่งอาจเกิดขึ้นหาก Collector หรือ Listener เริ่มทำงาน ก่อนที่จะมีการส่งPagingData(I1a748)
เวอร์ชัน 3.1.0-alpha03
21 กรกฎาคม 2021
ระบบจะถอนการอ้างสิทธิ์androidx.paging:paging-*:3.1.0-alpha03 เวอร์ชัน 3.1.0-alpha03 มีคอมมิตต่อไปนี้
การเปลี่ยนแปลง API
เพิ่มประเภทการคืนค่า LoadResult ของ LoadResult.Invalid ลงใน PagingSource เมื่อ PagingSource.load แสดงผล LoadResult.Invalid การแบ่งหน้าจะทิ้งข้อมูลที่โหลดแล้วและ ทำให้ PagingSource ไม่ถูกต้อง ประเภทการคืนค่านี้ออกแบบมาเพื่อ จัดการข้อมูลที่อาจไม่ถูกต้องหรือล้าสมัยซึ่งอาจส่งคืน จากฐานข้อมูลหรือเครือข่าย
ตัวอย่างเช่น หากมีการเขียนลงในฐานข้อมูลพื้นฐาน แต่ PagingSource ไม่ทำให้เป็นโมฆะได้ทันเวลา อาจทำให้ได้ผลลัพธ์ที่ไม่สอดคล้องกันหากการใช้งานขึ้นอยู่กับ ความคงที่ของชุดข้อมูลสำรองที่โหลดจาก (เช่น การใช้งานฐานข้อมูลรูปแบบ LIMIT OFFSET) ในสถานการณ์นี้ เราขอแนะนำให้ตรวจสอบการลบล้างหลังจากโหลดและส่งคืน LoadResult.Invalid ซึ่งจะทำให้ Paging ทิ้งคำขอโหลดที่รอดำเนินการหรือในอนาคตไปยัง 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 ที่ไม่ถูกต้องอยู่แล้ว การเปลี่ยนแปลงนี้จะแก้ไข Race Condition ซึ่งทำให้การแบ่งหน้าไม่ส่งสัญญาณการลบล้างและค้างเมื่อระบุแหล่งที่มาซึ่งไม่ถูกต้องอยู่แล้วในระหว่างการโหลดครั้งแรก นอกจากนี้ ตอนนี้ระบบจะนำ การเรียกกลับ invalidate ออกอย่างถูกต้องหลังจากที่ทริกเกอร์แล้ว เนื่องจากรับประกันได้ว่าจะมีการเรียกใช้เพียงครั้งเดียวเท่านั้น (I27e69)
- การส่งค่าเริ่มต้นของตัวยึดตำแหน่ง (InitialPagedList) จากสตรีม PagedList ที่สร้างขึ้นใหม่ เช่น LivePagedListBuilder หรือ RxPagedListBuilder จะไม่ล้างข้อมูลที่โหลดไว้ก่อนหน้านี้อีกต่อไป
เวอร์ชัน 3.1.0-alpha02
1 กรกฎาคม 2021
ระบบจะถอนการอ้างสิทธิ์androidx.paging:paging-*:3.1.0-alpha02 เวอร์ชัน 3.1.0-alpha02 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
เพิ่มเครื่องมือฟังเหตุการณ์ onPagesPresented และ API ของเครื่องมือแสดงโฟลว์ ซึ่งจะทริกเกอร์ทันทีหลังจากที่อัปเดตหน้าเว็บที่แสดงใน UI
เนื่องจากการอัปเดตเหล่านี้จะซิงโครไนซ์กับ UI คุณจึงเรียกใช้เมธอดของอะแดปเตอร์ เช่น .snapshot, .getItemCount เพื่อตรวจสอบสถานะหลังจากใช้การอัปเดตแล้วได้ โปรดทราบว่าเราปล่อยให้มีการเรียกใช้ .snapshot() อย่างชัดเจนเนื่องจากอาจมีค่าใช้จ่ายสูงหากทำทุกครั้งที่มีการอัปเดต
การอัปเดตหน้าเว็บอาจเกิดขึ้นในสถานการณ์ต่อไปนี้
- การโหลด PagingData รุ่นใหม่ครั้งแรกเสร็จสมบูรณ์ ไม่ว่ารุ่นใหม่จะมีรายการที่แสดงที่มีการเปลี่ยนแปลงหรือไม่ก็ตาม เช่น รุ่นใหม่ที่โหลดครั้งแรกเสร็จสมบูรณ์ โดยไม่มีการอัปเดตเนื่องจากรายการเหมือนกันทุกประการจะยังคง ทริกเกอร์การเรียกกลับนี้
- ระบบจะแทรกหน้า แม้ว่าหน้าแทรกจะไม่มีรายการใหม่ ก็ตาม
- ระบบจะทิ้งหน้า แม้ว่าหน้าดังกล่าวจะว่างเปล่า (I272c9, b/189999634)
การแก้ไขข้อบกพร่อง
- การเข้าถึง PagedList.dataSource จากค่าเริ่มต้นที่สร้างโดย LivePagedList หรือ RxPagedList จะไม่ทำให้เกิด IllegalStateException (I96707) อย่างไม่ถูกต้องอีกต่อไป
เวอร์ชัน 3.1.0-alpha01
2 มิถุนายน 2021
ระบบจะถอนการอ้างสิทธิ์androidx.paging:paging-*:3.1.0-alpha01 เวอร์ชัน 3.1.0-alpha01 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- คลาสที่จัดโดย
paging-rxjava3จะอยู่ในแพ็กเกจandroidx.paging.rxjava3เพื่อไม่ให้ขัดแย้งกับpaging-rxjava2(Ifa7f6)
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่บางครั้งการแบ่งหน้าจะส่งเหตุการณ์ no-op differ ไปยัง RecyclerView ซึ่งอาจทำให้ทริกเกอร์ Listener บางรายการ ก่อนเวลา (Ic507f, b/182510751)
การมีส่วนร่วมภายนอก
- เพิ่ม API ความเข้ากันได้ของ PagedList ที่เลิกใช้งานแล้วลงในอาร์ติแฟกต์ rxjava3 (Id1ce2, b/182497591)
Paging Compose เวอร์ชัน 1.0.0
เวอร์ชัน 1.0.0-alpha20
24 พฤษภาคม 2023
ระบบจะถอนการอ้างสิทธิ์androidx.paging:paging-compose:1.0.0-alpha20 เวอร์ชัน 1.0.0-alpha20 มีคอมมิตต่อไปนี้
ฟีเจอร์ใหม่
- ตอนนี้ Paging Compose รองรับการแสดงตัวอย่างรายการข้อมูลจำลองโดยการสร้าง
PagingData.from(fakeData)และการห่อPagingDataนั้นในMutableStateFlow(เช่นMutableStateFlow(PagingData.from(listOf(1, 2, 3)))) การใช้ข้อมูลดังกล่าวเป็นอินพุตใน@PreviewการเรียกไปยังcollectAsLazyPagingItems()จะแสดงLazyPagingItemsที่ดูตัวอย่างได้ (I8a78d, b/194544557)
การแก้ไขข้อบกพร่อง
- ตอนนี้ข้อมูลที่แคชจาก
pager.flow.cachedInซึ่งรวบรวมไว้ในLazyPagingItemsจะพร้อมใช้งานทันทีหลังจากการกู้คืนสถานะโดยไม่ต้องมีการรวบรวมข้อมูลแบบไม่พร้อมกัน ซึ่งหมายความว่าข้อมูลที่แคชไว้จะพร้อมสำหรับการนำเสนอทันทีเมื่อมีการจัดองค์ประกอบครั้งแรกหลังจากกู้คืนสถานะแล้ว (I97a60, b/177245496)
เวอร์ชัน 1.0.0-alpha19
3 พฤษภาคม 2023
ระบบจะถอนการอ้างสิทธิ์androidx.paging:paging-compose:1.0.0-alpha19 เวอร์ชัน 1.0.0-alpha19 มีคอมมิตเหล่านี้
รองรับเลย์เอาต์แบบเลื่อนทั้งหมด
ก่อนหน้านี้ Paging Compose มีส่วนขยาย items และ itemsIndexed ที่กำหนดเองใน LazyListScope ซึ่งหมายความว่าคุณไม่สามารถใช้ Paging Compose กับเลย์เอาต์แบบ Lazy อื่นๆ เช่น LazyVerticalGrid, HorizontalPager หรือคอมโพเนนต์แบบ Lazy ที่กำหนดเองอื่นๆ ที่ไลบรารี Wear และ TV มีให้ การแก้ไขความไม่ยืดหยุ่นนี้เป็นการอัปเดตหลักสำหรับการเผยแพร่นี้
เราต้องสร้าง API ในเลเยอร์อื่นเพื่อรองรับเลย์เอาต์แบบเลซี่เพิ่มเติม แทนที่จะให้ items API ที่กำหนดเองสำหรับเลย์เอาต์แบบเลซี่แต่ละรายการ ตอนนี้ Paging Compose มีเมธอดส่วนขยายระดับต่ำกว่าเล็กน้อยใน LazyPagingItems ใน itemKey และ itemContentType API เหล่านี้มุ่งเน้นการช่วยคุณใช้พารามิเตอร์ key และ contentType กับ API มาตรฐาน items ที่มีอยู่แล้วสําหรับ LazyColumn, LazyVerticalGrid รวมถึงพารามิเตอร์ที่เทียบเท่าใน API เช่น HorizontalPager (Ifa13b, Ib04f0, b/259385813)
ซึ่งหมายความว่าการรองรับ LazyVerticalGrid จะมีลักษณะดังนี้
// This part is unchanged
val lazyPagingItems = pager.collectAsLazyPagingItems()
LazyVerticalGrid(columns = GridCells.Fixed(2)) {
// Here we use the standard items API
items(
count = lazyPagingItems.itemCount,
// Here we use the new itemKey extension on LazyPagingItems to
// handle placeholders automatically, ensuring you only need to provide
// keys for real items
key = lazyPagingItems.itemKey { it.uniqueId },
// Similarly, itemContentType lets you set a custom content type for each item
contentType = lazyPagingItems.itemContentType { "contentType" }
) { index ->
// As the standard items call provides only the index, we get the item
// directly from our lazyPagingItems
val item = lazyPagingItems[index]
PagingItem(item = item)
}
}
ดูตัวอย่างเพิ่มเติมเกี่ยวกับการใช้ API ใหม่เหล่านี้ได้ที่ตัวอย่างของเรา
แม้ว่าการเปลี่ยนแปลงเหล่านี้จะทำให้ตัวอย่าง LazyColumn และ LazyRow ยาวขึ้นอีก 2-3 บรรทัด แต่เราคิดว่าความสอดคล้องในเลย์เอาต์แบบ Lazy ทั้งหมดเป็นปัจจัยสำคัญสำหรับผู้ที่ใช้ Paging Compose ในอนาคต ด้วยเหตุนี้ เราจึงเลิกใช้งานส่วนขยายที่มีอยู่สำหรับ LazyListScope แล้ว (I0c459, I92c8f, b/276989796)
การเปลี่ยนแปลง API
- เพื่ออำนวยความสะดวกในการย้ายข้อมูลไปยัง API ใหม่ ฟังก์ชันส่วนขยาย
itemsและitemsIndexedในLazyListScopeจึงรองรับพารามิเตอร์contentTypeแล้ว ซึ่งเป็นการจำลองการรองรับใน API ใหม่ (Ib1918, b/255283378)
การอัปเดตการขึ้นต่อกัน
- Paging Compose ได้อัปเดตการอ้างอิงจาก Compose 1.0.5 เป็น Compose 1.2.1 แล้ว (Ib1918, b/255283378)
เวอร์ชัน 1.0.0-alpha18
8 กุมภาพันธ์ 2023
androidx.paging:paging-compose:1.0.0-alpha18 จะเผยแพร่โดยไม่มีการเปลี่ยนแปลง เวอร์ชัน 1.0.0-alpha18 มีคอมมิตเหล่านี้
เวอร์ชัน 1.0.0-alpha17
24 ตุลาคม 2022
ระบบจะถอนการอ้างสิทธิ์androidx.paging:paging-compose:1.0.0-alpha17 เวอร์ชัน 1.0.0-alpha17 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- เพิ่มการรองรับ
CoroutineContextที่กำหนดเองเมื่อโทรหาcollectLazyPagingItems(I7a574, b/243182795, b/233783862)
เวอร์ชัน 1.0.0-alpha16
10 สิงหาคม 2022
ระบบจะถอนการอ้างสิทธิ์androidx.paging:paging-compose:1.0.0-alpha16 เวอร์ชัน 1.0.0-alpha16 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้ Paging มีบันทึกผ่านคลาส
LazyPagingItemsเพื่อแสดงข้อมูลการแก้ไขข้อบกพร่องที่รวบรวมจาก PagingData - คุณเปิดใช้บันทึกได้ผ่าน
adb shellคำสั่งadb shell setprop log.tag.Paging [DEBUG|VERBOSE]([b/235527159}(https://issuetracker.google.com/issues/235527159))
การแก้ไขข้อบกพร่อง
- แก้ไขข้อผิดพลาดเกี่ยวกับตัวสร้าง
PagingDataDifferที่ขาดหายไปเมื่อใช้paging-compose:1.0.0-alpha15กับpaging-common:3.1.1หรือเวอร์ชันเก่ากว่า (b/235256201,b/239868768)
เวอร์ชัน 1.0.0-alpha15
1 มิถุนายน 2022
ระบบจะถอนการอ้างสิทธิ์androidx.paging:paging-compose:1.0.0-alpha15 เวอร์ชัน 1.0.0-alpha15 มีคอมมิตต่อไปนี้
การเปลี่ยนแปลง API
- เพิ่มตัวสร้างสำหรับ
PagingDataAdapterและAsyncPagingDataDifferซึ่งยอมรับCoroutineContextแทนCoroutineDispatcher(Idc878)
การแก้ไขข้อบกพร่อง
LazyPagingItemsจะตั้งค่าเริ่มต้นให้loadStateมีการLoadState.Loadingรีเฟรช (I55043, b/224855902)
เวอร์ชัน 1.0.0-alpha14
13 ตุลาคม 2021
ระบบจะถอนการอ้างสิทธิ์androidx.paging:paging-compose:1.0.0-alpha14 เวอร์ชัน 1.0.0-alpha14 มีคอมมิตต่อไปนี้
เวอร์ชัน 1.0.0-alpha13
29 กันยายน 2021
ระบบจะถอนการอ้างสิทธิ์androidx.paging:paging-compose:1.0.0-alpha13 เวอร์ชัน 1.0.0-alpha13 มีคอมมิตต่อไปนี้
การเปลี่ยนแปลง API
- ฟังก์ชัน
LazyPagingItems.snapshot()ถูกแทนที่ด้วยพร็อพเพอร์ตี้LazyPagingItems.itemSnapshotList(Ie2da8) - นำ
LazyPagingItems.getAsState()ที่เลิกใช้งานแล้วออก (Ie65e4)
เวอร์ชัน 1.0.0-alpha12
21 กรกฎาคม 2021
ระบบจะถอนการอ้างสิทธิ์androidx.paging:paging-compose:1.0.0-alpha12 เวอร์ชัน 1.0.0-alpha12 มีคอมมิตต่อไปนี้
การเปลี่ยนแปลง API
items(lazyPagingItems)และitemsIndexed(lazyPagingItems)ที่ใช้เชื่อมต่อการแบ่งหน้ากับLazyColumn/Rowตอนนี้ยอมรับพารามิเตอร์คีย์ตัวเลือกแล้ว ซึ่งช่วยให้คุณระบุคีย์ที่เสถียรซึ่งแสดงถึงรายการได้ อ่านเพิ่มเติมเกี่ยวกับคีย์ได้ที่นี่ (I7986d)- ตอนนี้ฟังก์ชัน
lazyPagingItems.getAsState(index)เลิกใช้งานแล้ว โปรดใช้lazyPagingItems[index]แทน (I086cb, b/187339372)
เวอร์ชัน 1.0.0-alpha11
30 มิถุนายน 2021
ระบบจะถอนการอ้างสิทธิ์androidx.paging:paging-compose:1.0.0-alpha11 เวอร์ชัน 1.0.0-alpha11 มีคอมมิตต่อไปนี้
เวอร์ชัน 1.0.0-alpha10
2 มิถุนายน 2021
ระบบจะถอนการอ้างสิทธิ์androidx.paging:paging-compose:1.0.0-alpha10 เวอร์ชัน 1.0.0-alpha10 มีคอมมิตเหล่านี้
เวอร์ชัน 1.0.0-alpha09
18 พฤษภาคม 2021
ระบบจะถอนการอ้างสิทธิ์androidx.paging:paging-compose:1.0.0-alpha09 เวอร์ชัน 1.0.0-alpha09 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- ตอนนี้ itemCount และตัวรับรายการของ LazyPagingItems สามารถสังเกตได้แล้ว ซึ่งทำให้ใช้กับ LazyVerticalGrid ได้ด้วย (Ie2446, b/171872064, b/168285687)
ความเข้ากันได้ของ Compose
androidx.paging:paging-compose:1.0.0-alpha09ใช้ได้กับ Compose เวอร์ชัน1.0.0-beta07ขึ้นไปเท่านั้น
เวอร์ชัน 1.0.0-alpha08
24 กุมภาพันธ์ 2021
ระบบจะถอนการอ้างสิทธิ์androidx.paging:paging-compose:1.0.0-alpha08 เวอร์ชัน 1.0.0-alpha08 มีคอมมิตต่อไปนี้
อัปเดตเพื่อผสานรวมกับ Compose 1.0.0-beta01
เวอร์ชัน 1.0.0-alpha07
10 กุมภาพันธ์ 2021
ระบบจะถอนการอ้างสิทธิ์androidx.paging:paging-compose:1.0.0-alpha07 เวอร์ชัน 1.0.0-alpha07 มีคอมมิตต่อไปนี้
อัปเดตเพื่อผสานรวมกับ Compose Alpha12
เวอร์ชัน 1.0.0-alpha06
28 มกราคม 2021
ระบบจะถอนการอ้างสิทธิ์androidx.paging:paging-compose:1.0.0-alpha06 เวอร์ชัน 1.0.0-alpha06 มีคอมมิตต่อไปนี้
การแก้ไขข้อบกพร่อง
อัปเดตให้ขึ้นอยู่กับ Compose 1.0.0-alpha11
เวอร์ชัน 1.0.0-alpha05
13 มกราคม 2021
ระบบจะถอนการอ้างสิทธิ์androidx.paging:paging-compose:1.0.0-alpha05 เวอร์ชัน 1.0.0-alpha05 มีคอมมิตเหล่านี้
อัปเดตให้ขึ้นอยู่กับ Compose 1.0.0-alpha10
เวอร์ชัน 1.0.0-alpha04
16 ธันวาคม 2020
ระบบจะถอนการอ้างสิทธิ์androidx.paging:paging-compose:1.0.0-alpha04 เวอร์ชัน 1.0.0-alpha04 มีคอมมิตต่อไปนี้
การแก้ไขข้อบกพร่อง
- อัปเดตพร็อพเพอร์ตี้ความสะดวก
CombinedLoadStates.refresh,CombinedLoadStates.prependCombinedLoadStates.appendให้เปลี่ยนจากLoadingเป็นNotLoadingเท่านั้น หลังจากที่ทั้งสถานะการโหลดของสื่อกลางและแหล่งที่มาเป็นNotLoadingเพื่อให้แน่ใจว่า ได้ใช้การอัปเดตจากระยะไกลแล้ว (I65619)
เวอร์ชัน 1.0.0-alpha03
2 ธันวาคม 2020
ระบบจะถอนการอ้างสิทธิ์androidx.paging:paging-compose:1.0.0-alpha03 เวอร์ชัน 1.0.0-alpha03 มีคอมมิตต่อไปนี้
- อัปเดตให้ตรงกับ Compose 1.0.0-alpha08
เวอร์ชัน 1.0.0-alpha02
11 พฤศจิกายน 2020
ระบบจะถอนการอ้างสิทธิ์androidx.paging:paging-compose:1.0.0-alpha02 เวอร์ชัน 1.0.0-alpha02 มีคอมมิตต่อไปนี้
การเปลี่ยนแปลง API
- เพิ่มเมธอด
.peek(),.snapshot(),.retry()และ.refresh()ลงในLazyPagingItems ซึ่งแสดงฟังก์ชันการทำงานเดียวกันกับที่มีในAsyncPagingDataDiffer/PagingDataAdapter(Iddfe8, b/172041660)
เวอร์ชัน 1.0.0-alpha01
28 ตุลาคม 2020
ระบบจะถอนการอ้างสิทธิ์androidx.paging:paging-compose:1.0.0-alpha01 เวอร์ชัน 1.0.0-alpha01 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
อาร์ติแฟกต์ paging-compose ช่วยผสานรวมระหว่าง Paging Library กับ Jetpack Compose ตัวอย่างการใช้งานอย่างง่าย
@Composable
@OptIn(ExperimentalLazyDsl::class)
fun ItemsDemo(flow: Flow<PagingData<String>>) {
val lazyPagingItems = flow.collectAsLazyPagingItems()
LazyColumn {
items(lazyPagingItems) {
Text("Item is $it")
}
}
}
เวอร์ชัน 3.0.1
เวอร์ชัน 3.0.1
21 กรกฎาคม 2021
ระบบจะถอนการอ้างสิทธิ์androidx.paging:paging-*:3.0.1 เวอร์ชัน 3.0.1 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- การเข้าถึง
PagedList.dataSourceจากค่าเริ่มต้นที่สร้างโดยLivePagedListหรือRxPagedListจะไม่ทำให้เกิด IllegalStateException (I96707) อย่างไม่ถูกต้องอีกต่อไป
เวอร์ชัน 3.0.0
เวอร์ชัน 3.0.0
5 พฤษภาคม 2021
ระบบจะถอนการอ้างสิทธิ์androidx.paging:paging-*:3.0.0 เวอร์ชัน 3.0.0 มีคอมมิตเหล่านี้
ฟีเจอร์หลักของเวอร์ชัน 3.0.0
API ที่มีอยู่ส่วนใหญ่จาก Paging 2.x.x ถูกเลิกใช้งานแล้วเพื่อรองรับ Paging 3 API ใหม่ที่จะนำมาซึ่งการปรับปรุงต่อไปนี้
- รองรับ Kotlin Coroutines และ Flow อย่างเต็มที่
- การสนับสนุนสำหรับการยกเลิก
- สัญญาณสถานะการโหลดและข้อผิดพลาดในตัว
- ฟังก์ชันลองอีกครั้ง + รีเฟรช
- เราได้รวมคลาสย่อย DataSource ทั้ง 3 คลาสไว้ในคลาส PagingSource เดียว
- การเปลี่ยนรูปแบบหน้าเว็บที่กำหนดเอง รวมถึงการเปลี่ยนรูปแบบในตัวสำหรับการเพิ่มตัวคั่น
- ส่วนหัวและส่วนท้ายของสถานะการโหลด
เวอร์ชัน 3.0.0-rc01
21 เมษายน 2021
ระบบจะถอนการอ้างสิทธิ์androidx.paging:paging-*:3.0.0-rc01 เวอร์ชัน 3.0.0-rc01 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่บางครั้งการแบ่งหน้าจะส่งเหตุการณ์ no-op differ ไปยัง RecyclerView ซึ่งอาจทำให้ทริกเกอร์ Listener บางรายการ ก่อนเวลา (Ic507f, b/182510751)
เวอร์ชัน 3.0.0-beta03
24 มีนาคม 2021
ระบบจะถอนการอ้างสิทธิ์androidx.paging:paging-*:3.0.0-beta03 เวอร์ชัน 3.0.0-beta03 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- เราได้ปรับปรุงวิธีจัดการตัวยึดตำแหน่งเมื่อโหลดรายการซ้ำเพื่อป้องกันไม่ให้ RecyclerView ข้ามไปอย่างไม่คาดคิด ดูรายละเอียดได้ที่ NullPaddedDiffing.md (If1490, b/170027529, b/177338149)
- ตัวสร้าง PagedList ต่างๆ (เส้นทางการทำงานร่วมกันแบบเดิม) จะไม่เรียก
DataSource.Factory.create()ในเทรดหลักอย่างไม่ถูกต้องพร้อมกันอีกต่อไปเมื่อมีการเรียก.build()(b/182798948)
เวอร์ชัน 3.0.0-beta02
10 มีนาคม 2021
ระบบจะถอนการอ้างสิทธิ์androidx.paging:paging-*:3.0.0-beta02 เวอร์ชัน 3.0.0-beta02 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- ตอนนี้ส่วนขยาย Rx3 จะเผยแพร่
@ExperimentalCoroutinesApiข้อกำหนดในการเลือกใช้ได้อย่างถูกต้องแล้ว ก่อนหน้านี้มีการทำเครื่องหมายในเมธอด@getซึ่งคอมไพเลอร์ Kotlin จะไม่สนใจเนื่องจาก https://youtrack.jetbrains.com/issue/KT-45227 (I5733c)
การแก้ไขข้อบกพร่อง
- บังคับใช้ข้อจำกัดในการใช้งาน API การทดสอบแบบสาธารณะ (I6aa29, b/174531520)
- แก้ไขข้อบกพร่องที่ทำให้
PagingStateเป็นnullเสมอเมื่อมีการเรียกการรีเฟรชจากระยะไกล - แก้ไขข้อบกพร่องที่หน้าว่างซึ่ง PagingSource ส่งคืนอาจป้องกันไม่ให้ Paging ดึงข้อมูลอีกครั้งเพื่อตอบสนอง
prefetchDistanceซึ่งทำให้ Paging "ค้าง"
เวอร์ชัน 3.0.0-beta01
10 กุมภาพันธ์ 2021
ระบบจะถอนการอ้างสิทธิ์androidx.paging:paging-*:3.0.0-beta01 เวอร์ชัน 3.0.0-beta01 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- ตอนนี้ Wrapper Rx2 และ Rx3 จะแสดงคำอธิบายประกอบเวอร์ชันทดลองที่ขึ้นอยู่กับคำอธิบายประกอบนั้น หากคุณใช้ Wrapper ความเข้ากันได้ของ Rx ใน paging-rxjava2 หรือ
paging-rxjava3 ตอนนี้คุณจะต้องใส่คำอธิบายประกอบการใช้งานด้วย
@OptIn(ExperimentalCoroutinesApi::class)(Ib1f9d)
การแก้ไขข้อบกพร่อง
- แก้ไขข้อผิดพลาด
IndexOutOfBoundsException: Inconsistency detectedที่บางครั้งเกิดขึ้นเมื่อใช้ API v2DataSourceผ่านเส้นทางความเข้ากันได้ isInvalidcall ระหว่างการเริ่มต้นของ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เป็นศูนย์กลางรอบๆ Viewport หากเป็นไปได้ (I4339a)- ตอนนี้
InvalidatingPagingSourceFactoryเป็นคลาสสุดท้ายแล้ว (Ia3b0a) - อนุญาตการกำหนดค่าลักษณะการทำงานของตัวคั่นเทอร์มินัล (ส่วนหัว / ส่วนท้าย)
ด้วยพารามิเตอร์ SeparatorType เพิ่มเติมที่ไม่บังคับ โดยมี 2 ตัวเลือก
ดังนี้
FULLY_COMPLETE- ลักษณะการทำงานที่มีอยู่ รอให้ทั้ง PagingSource และ RemoteMediator ทำเครื่องหมาย endOfPaginationReached ก่อนเพิ่มตัวคั่น สุดท้าย หากไม่ได้ใช้ RemoteMediator ระบบจะ ละเว้น loadState ระยะไกล ซึ่งจะมีประโยชน์เป็นหลักในกรณีที่คุณต้องการแสดงตัวคั่นส่วน เมื่อส่วนนั้นโหลดเสร็จสมบูรณ์แล้วเท่านั้น รวมถึงการดึงข้อมูลจาก แหล่งที่มาภายนอก เช่น เครือข่ายSOURCE_COMPLETE- รอให้ PagingSource ทำเครื่องหมาย endOfPaginationReached แม้ว่าจะใช้ RemoteMediator ก็ตาม ซึ่งจะช่วยให้แสดงส่วนหัวและส่วนท้ายพร้อมกันกับการโหลดครั้งแรกได้ ซึ่งจะช่วยให้ผู้ใช้ไม่ต้องเลื่อนเพื่อดูตัวคั่นเทอร์มินัล (Ibe993, b/174700218)
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาหน่วยความจำรั่วที่เกิดขึ้นได้ยากเมื่อมีการ ล้าง PagingSource ก่อนที่ PageFetcher จะเริ่มโหลดจาก PagingSource ได้ (I9606b, b/174625633)
เวอร์ชัน 3.0.0-alpha12
13 มกราคม 2021
ระบบจะถอนการอ้างสิทธิ์androidx.paging:paging-*:3.0.0-alpha12 เวอร์ชัน 3.0.0-alpha12 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- InvalidatingPagingSourceFactory ไม่ใช่คลาส Abstract อีกต่อไป เนื่องจากไม่มีเมธอด Abstract (I4a8c4)
- เพิ่มฟังก์ชัน .cachedIn() ที่โอเวอร์โหลดซึ่งยอมรับ ViewModel แทน Lifecycle หรือ CoroutineScope สำหรับผู้ใช้ Java (I97d81, b/175332619)
- อนุญาตให้ผู้เรียกใช้ Java ใช้การดำเนินการเปลี่ยนรูปแบบ PagingData ในลักษณะอะซิงก์โดยการยอมรับ Executor ในอาร์กิวเมนต์ของตัวดำเนินการเปลี่ยนรูปแบบ ตอนนี้ระบบได้นำคำต่อท้าย -Sync ออกจากตัวดำเนินการแปลง -Sync ทั้งหมดแล้ว และผู้ใช้ Kotlin Coroutine จะต้องแยกความแตกต่างโดยการเรียกฟังก์ชันส่วนขยายที่ยอมรับบล็อกที่ระงับแทน
เราได้ย้ายโอเปอเรเตอร์การเปลี่ยนรูปแบบ PagingData ทั้งหมดไปไว้ในส่วนขยาย
ภายใต้คลาส PagingDataTransforms แบบคงที่แล้ว ผู้ใช้ Java จะต้อง
เรียกใช้ผ่านตัวช่วยแบบคงที่ เช่น
PagingDataTransforms.map(pagingData, transform)สำหรับผู้ใช้ Kotlin ไวยากรณ์จะเหมือนกัน แต่คุณจะต้องนำเข้าฟังก์ชัน (If6885, b/172895919)
การแก้ไขข้อบกพร่อง
- แก้ไขข้อบกพร่องที่ทำให้ไม่มีการเรียกใช้
RemoteMediator.load()ระหว่างadapter.refresh()หากถึงจุดสิ้นสุดของการแบ่งหน้าแล้ว
เวอร์ชัน 3.0.0-alpha11
16 ธันวาคม 2020
ระบบจะถอนการอ้างสิทธิ์androidx.paging:paging-*:3.0.0-alpha11 เวอร์ชัน 3.0.0-alpha11 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- เพิ่มการรองรับสถานะที่บันทึกไว้สำหรับกรณีการใช้งานพื้นฐานต่อไปนี้ (การรองรับแบบเต็ม โดยเฉพาะในกรณีแหล่งที่มาแบบเลเยอร์ยังอยู่ระหว่างดำเนินการ)
- แคชโฟลว์และไม่ได้ปิดแอปพลิเคชัน (เช่น แคชโฟลว์ใน ViewModel และกิจกรรมจะสร้างขึ้นใหม่ในกระบวนการ)
- ระบบจะนับแหล่งที่มาของการแบ่งหน้า เปิดใช้ตัวยึดตำแหน่ง และเลย์เอาต์ ไม่สลับ
การเปลี่ยนแปลง API
PagingSource.getRefreshKey()ตอนนี้เป็น API ที่เสถียรแล้ว (I22f6f, b/173530980)PagingSource.invalidateไม่ใช่ฟังก์ชันที่เปิดให้ใช้งานอีกต่อไป หากต้องการรับการแจ้งเตือนเมื่อมีการลบล้าง ให้พิจารณาเรียกใช้เมธอด registerInvalidatedCallback แทนการลบล้าง invalidate (I628d9, b/173029013, b/137971356)- ตอนนี้ Pager มีตัวสร้างการทดลองรายการเดียวควบคู่ไปกับตัวสร้างปกติ แทนที่จะรั่วไหล API การทดลองไปยัง API สาธารณะที่ไม่ใช่การทดลองผ่านคำอธิบายประกอบแบบเลือกใช้ (I9dc61, b/174531520)
- อัปเดตพร็อพเพอร์ตี้ความสะดวก
CombinedLoadStates.refresh,CombinedLoadStates.prependCombinedLoadStates.appendให้เปลี่ยนจากLoadingเป็นNotLoadingเท่านั้น หลังจากที่ทั้งสถานะการโหลดของสื่อกลางและแหล่งที่มาเป็นNotLoadingเพื่อให้แน่ใจว่า ได้ใช้การอัปเดตจากระยะไกลแล้ว (I65619) นำ LoadParams.pageSize ออกแล้ว (เลิกใช้งานไปแล้ว ) เราขอแนะนำให้ใช้
LoadParams.loadSizeใน PagingSourceLoadParams.loadSizeจะเท่ากับPagingConfig.pageSizeเสมอ ยกเว้นการเรียกใช้การโหลดครั้งแรกซึ่งจะเท่ากับPagingConfig.initialLoadSizeหากคุณทดสอบ DataSource ของ Paging2 โดยไม่ใช้ Pager หรือ PagedList
pageSizeอาจไม่ตรงกับPagingConfig.pageSizeหากคุณตั้งค่าinitialLoadSizeด้วย หากการทดสอบมีความสำคัญสำหรับคุณ ให้ลองใช้ Pager/PagedList แทน ซึ่งจะตั้งค่า PageSize ที่ถูกต้องสำหรับเมธอดการโหลด DataSource ภายใน (I98ac7, b/149157296)
การแก้ไขข้อบกพร่อง
- แก้ไขข้อขัดข้องเนื่องจาก IllegalStateException เมื่อ ใช้ตัวคั่นที่มีการตั้งค่า PagingConfig.maxSize (I0ed33, b/174787528)
- แก้ไขข้อบกพร่องที่สถานะการโหลดสำหรับ PREPEND / APPEND จะไม่อัปเดตเป็น
NotLoading(endOfPaginationReached = true)ทันที หลังจากโหลดครั้งแรกหากตั้งค่า RemoteMediator ไว้ (I8cf5a) - แก้ไขข้อบกพร่องที่ API ฝั่งผู้นำเสนอ เช่น .snapshot(), .peek() ฯลฯ จะแสดงรายการก่อนหน้า (ล้าสมัย) ภายในการอัปเดต ListUpdateCallback
- แก้ไขข้อบกพร่องที่โอเปอเรเตอร์ตัวคั่นจะไม่เพิ่มส่วนหัวหรือส่วนท้ายเมื่อใช้กับ RemoteMediator
- แก้ไขข้อบกพร่องที่ทำให้การอัปเดต LoadState เป็น NotLoading สำหรับ RemoteMediator ค้างอยู่ในสถานะ Loading
- แก้ไขข้อบกพร่องที่ API ความเข้ากันได้ของ Paging 2.0,
.asPagingSourceFactory()อาจทำให้มีการเริ่มต้นDataSourceที่อยู่เบื้องหลังใน CoroutineDispatcher ที่ไม่ถูกต้อง ซึ่งจะช่วยแก้ไขกรณีที่แอปขัดข้องและอาจเกิด ANR โดยเฉพาะเมื่อใช้การติดตั้งใช้งาน PagingSource ปัจจุบันของ Room ซึ่งใช้เส้นทางความเข้ากันได้นี้
เวอร์ชัน 3.0.0-alpha10
2 ธันวาคม 2020
ระบบจะถอนการอ้างสิทธิ์androidx.paging:paging-*:3.0.0-alpha10 เวอร์ชัน 3.0.0-alpha10 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
ระบบได้นำ API ของ
dataRefreshFlowและdataRefreshListenerที่เลิกใช้งานแล้วออก เนื่องจากซ้ำซ้อนกับการอัปเดต loadStateFlow / Listener สำหรับ ผู้ที่ย้ายข้อมูล ฟีเจอร์ที่เทียบเท่ากับ loadStateFlow คือloadStateFlow.distinctUntilChangedBy { it.refresh } .filter { it.refresh is NotLoading }
การแก้ไขข้อบกพร่อง
- ตอนนี้
REFRESHendOfPaginationReached สำหรับ RemoteMediator จะส่งต่อการอัปเดต LoadState อย่างถูกต้อง และป้องกันไม่ให้APPENDและPREPENDจากระยะไกลทริกเกอร์ (I94a3f, b/155290248) - การแสดงรายการที่ว่างเปล่าเนื่องจากหน้าเริ่มต้นว่างเปล่าหรือ
การกรองที่หนักหน่วงจะไม่ทำให้การแบ่งหน้าไม่เริ่มทำงาน
PREPENDหรือโหลดAPPENDอีกต่อไป (I3e702, b/168169730) - แก้ไขปัญหาที่ไม่ได้เรียกใช้
getRefreshKeyใน PagingSource รุ่นต่อๆ ไปเมื่อมีการล้างข้อมูลอย่างรวดเร็ว (I45460, b/170027530)
การมีส่วนร่วมภายนอก
- เพิ่มคลาส Abstract ใหม่ชื่อ InvalidatingPagingSourceFactory
พร้อมด้วย
.invalidate()API ที่ส่งต่อการล้างข้อมูลไปยัง PagingSource ทั้งหมด ที่ปล่อยออกมา ขอขอบคุณ @claraf3 (Ie71fc, b/160716447)
ปัญหาที่ทราบ
- ส่วนหัวและส่วนท้ายจากการเปลี่ยนรูปแบบ .insertSeparators() อาจไม่ปรากฏในทันทีเมื่อใช้ RemoteMediator b/172254056
- การใช้ RemoteMediator อาจทำให้
LoadStateค้างได้หากการลบล้างและPagingSource.load(LoadParams.Refresh(...))เสร็จสมบูรณ์ก่อนที่RemoteMediator.load()จะส่งคืน b/173717820
เวอร์ชัน 3.0.0-alpha09
11 พฤศจิกายน 2020
ระบบจะถอนการอ้างสิทธิ์androidx.paging:paging-*:3.0.0-alpha09 เวอร์ชัน 3.0.0-alpha09 มีคอมมิตต่อไปนี้
การเปลี่ยนแปลง API
- เลิกใช้งานเมธอด dataRefreshFlow / Listener อย่างสมบูรณ์ด้วย replaceWith clause (I6e2dd)
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่เกิด
IllegalArgumentExceptionเมื่อใช้ตัวคั่นกับ RemoteMediator และมีการทริกเกอร์การล้างข้อมูลขณะที่การโหลดจากระยะไกลซึ่งจะแสดงผล endOfPagination ยังคงทำงานอยู่ (I3a260)
เวอร์ชัน 3.0.0-alpha08
28 ตุลาคม 2020
ระบบจะถอนการอ้างสิทธิ์androidx.paging:paging-*:3.0.0-alpha08 เวอร์ชัน 3.0.0-alpha08 มีคอมมิตต่อไปนี้
การเปลี่ยนแปลง API
- ตัวแปร Kotlin / Java ของ
DataSource.InvalidatedCallbackได้รับการรวมเข้าด้วยกันโดยการเปิดใช้การแปลง SAM ใน Kotlin ผ่านอินเทอร์เฟซฟังก์ชัน (พร้อมใช้งานใน Kotlin 1.4) นอกจากนี้ยังแก้ไขข้อบกพร่องที่ไม่ได้เรียกใช้ รูปแบบ Kotlin ของการเรียกกลับ invalidate หลังจากที่.mapหรือ.mapByPageแปลงแล้วด้วย (I1f244, b/165313046)
การแก้ไขข้อบกพร่อง
- เราได้ปรับปรุงการโต้ตอบของ Paging กับ ViewPager อย่างมาก โดยเฉพาะอย่างยิ่ง 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
- ตอนนี้ตัวดำเนินการ Async PagingData ที่ใช้ Guava ยอมรับ Executor เป็นพารามิเตอร์เพื่อควบคุมบริบทการดำเนินการแล้ว (Id4372)
การแก้ไขข้อบกพร่อง
- แก้ไขข้อยกเว้น IndexOutOfBounds ที่เกิดขึ้นใน RemoteMediator เนื่องจาก Race Condition (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 จึงซ้ำซ้อน (Ia19f3)
- เพิ่ม Wrapper ความเข้ากันได้ของ RxJava3 สำหรับ
PagingSourceและRemoteMediator(I49ef3, b/161480176)
การแก้ไขข้อบกพร่อง
PositionalDataSourceที่แปลงเป็นPagingSourceผ่านtoPagingSourceFactoryHelper รวมถึง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) - เพิ่ม API ของ RxJava และ Guava สำหรับ RemoteMediator - RxRemoteMediator และ ListenableFutureRemoteMediator
- เพิ่มตัวช่วยไปยัง PagingState สำหรับการเข้าถึงรายการทั่วไป เช่น
isEmpty()และfirstItemOrNull()(I3b5b6, b/158892717)
การแก้ไขข้อบกพร่อง
- ตอนนี้ Pager จะตรวจสอบการนำ PagingSource กลับมาใช้ซ้ำใน Factory เพื่อป้องกันการนำ PagingSource ที่ไม่ถูกต้องกลับมาใช้ซ้ำโดยไม่ตั้งใจ ซึ่งทำให้เกิดข้อผิดพลาดที่ไม่ชัดเจน (I99809, b/158486430)
- ความล้มเหลวจากการรีเฟรช RemoteMediator จะไม่ทำให้ PagingSource โหลดไม่ได้อีกต่อไป (I38b1b, b/158892717)
- เวอร์ชันที่ไม่ระงับของ
submitDataจะไม่ทำให้เกิดข้อขัดข้องเนื่องจากการรวบรวมพร้อมกันในPagingDataหลายรายการเมื่อเรียกใช้หลังจากเวอร์ชันที่ระงับของsubmitDataอีกต่อไป (I26358, b/158048877) - แก้ไขข้อยกเว้น "รวบรวมจากเพจเจอร์ 2 ครั้งไม่ได้" ที่อาจเกิดขึ้นหลังจากการเปลี่ยนแปลงการกำหนดค่า (I58bcc, b/158784811)
เวอร์ชัน 3.0.0-alpha01
10 มิถุนายน 2020
ระบบจะถอนการอ้างสิทธิ์androidx.paging:paging-*:3.0.0-alpha01 เวอร์ชัน 3.0.0-alpha01 มีคอมมิตต่อไปนี้
Paging Library ได้รับการอัปเดตเป็น 3.0 เพื่อเปิดใช้ฟีเจอร์ใหม่ๆ ที่สำคัญหลายอย่าง
ฟีเจอร์ใหม่ของเวอร์ชัน 3.0
- รองรับ Kotlin Coroutines และ Flow อย่างเต็มที่
- รองรับการโหลดแบบไม่พร้อมกันด้วยฟังก์ชันระงับโครูทีน, RxJava Single หรือ Guava ListenableFuture primitives
- สัญญาณสถานะการโหลดและข้อผิดพลาดในตัวสำหรับการออกแบบ UI ที่ตอบสนอง รวมถึงฟังก์ชันการลองอีกครั้งและการรีเฟรช
- การปรับปรุงเลเยอร์ที่เก็บ
- อินเทอร์เฟซแหล่งข้อมูลที่เรียบง่ายขึ้น
- การแบ่งหน้าเครือข่าย + ฐานข้อมูลที่ง่ายขึ้น
- การสนับสนุนการยกเลิก
- การปรับปรุงเลเยอร์การนำเสนอ
ปัญหาที่ทราบ
- เอกสารประกอบ Paging 3 Java ยังไม่พร้อมใช้งาน ในระหว่างนี้ โปรดใช้คำแนะนำที่ลิงก์ไว้ด้านบนหรือเอกสารประกอบของ Kotlin (b/158614050)
เวอร์ชัน 2.1.2
เวอร์ชัน 2.1.2
18 มีนาคม 2020
ระบบจะถอนการอ้างสิทธิ์androidx.paging:paging:2.1.2 เวอร์ชัน 2.1.2 มีคอมมิตเหล่านี้เทียบกับ 2.1.0
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาสำหรับ
IndexOutOfBoundsExceptionในกรณีที่แทบจะไม่เคยเกิดขึ้นเมื่อแปลงตำแหน่งระหว่างการลบล้าง
ปัญหาเกี่ยวกับการเผยแพร่
เราเผยแพร่เวอร์ชันการแบ่งหน้า
2.1.1อย่างไม่ถูกต้องจากสาขาที่กำหนดค่าไม่ถูกต้อง ซึ่งทำให้ API และฟังก์ชันการทำงานที่ยังไม่ได้ใช้งานบางส่วนเปิดเผยต่อสาธารณะ ซึ่งฟีเจอร์เหล่านี้จะพร้อมใช้งานในรุ่นต่อๆ ไปการแบ่งหน้า
2.1.2มีการแก้ไขการโหลดที่กึ่งกลางซึ่งเปิดตัวครั้งแรกใน 2.1.1 แต่ครั้งนี้ได้เลือกอย่างถูกต้องบนการเปิดตัว 2.1.0 ขอแนะนำเป็นอย่างยิ่งให้อัปเกรดเป็นรุ่นนี้ หากคุณใช้เวอร์ชัน 2.1.1 อยู่
เวอร์ชัน 2.1.1
เวอร์ชัน 2.1.1
18 ธันวาคม 2019
ระบบจะถอนการอ้างสิทธิ์androidx.paging:paging-*:2.1.1 เวอร์ชัน 2.1.1 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- ตอนนี้การโหลดเริ่มต้นที่ต่อเนื่องจาก PositionalDataSources จะอยู่ตรงกลางรอบๆ การเข้าถึงครั้งล่าสุดเมื่อปิดใช้ตัวยึดตำแหน่ง
เวอร์ชัน 2.1.0
เวอร์ชัน 2.1.0
25 มกราคม 2019
การแบ่งหน้า 2.1.0 จะเปิดตัวโดยไม่มีการเปลี่ยนแปลงจาก 2.1.0-rc01
เวอร์ชัน 2.1.0-rc01
6 ธันวาคม 2018
การแบ่งหน้า 2.1.0-rc01 จะเปิดตัวโดยไม่มีการเปลี่ยนแปลงจาก 2.1.0-beta01
เวอร์ชัน 2.1.0-beta01
1 พฤศจิกายน 2018
การแบ่งหน้า 2.1.0-beta01 จะเปิดตัวโดยไม่มีการเปลี่ยนแปลงจาก 2.1.0-alpha01
เวอร์ชัน 2.1.0-alpha01
12 ตุลาคม 2018
Paging 2.1.0-alpha01 มีการเพิ่มฟีเจอร์หลัก 2 อย่าง ได้แก่ การดรอปหน้า และไลบรารีส่วนขยาย KTX สำหรับทุกอาร์ติแฟกต์ รวมถึงการเปลี่ยนแปลง API อื่นๆ และการแก้ไขข้อบกพร่องอีกหลายอย่าง
การเปลี่ยนแปลง API
- เพิ่ม
PagedList.Config.Builder.setMaxSize()เพื่อจำกัดจำนวนรายการที่โหลดในหน่วยความจำ - เพิ่ม
androidx.paging.Config()เป็นทางเลือก Kotlin สำหรับPagedList.Config.Builder - เพิ่ม
androidx.paging.PagedList()เป็นทางเลือก Kotlin สำหรับPagedList.Builder - เพิ่ม
DataSourceFactory.toLiveData()เป็นทางเลือก Kotlin สำหรับLivePagedListBuilder - เพิ่ม
DataSourceFactory.toObservable()และtoFlowable()เป็นทางเลือก Kotlin สำหรับRxPagedListBuilder - เพิ่ม
AsyncPagedListDiffer.addPagedListListener()สำหรับการฟังเมื่อมีการสลับ PagedList b/111698609 - เพิ่ม
PagedListAdapter.onCurrentListChanged()ตัวแปรที่ส่งผ่านรายการเก่าและใหม่ เลิกใช้งานตัวแปรก่อนหน้า - เพิ่มตัวแปร
PagedListAdapter/AsyncPagedListDiffer.submitList()ซึ่งใช้ Callback เพิ่มเติมที่จะทริกเกอร์หาก/เมื่อแสดงรายการแบบแบ่งหน้าหลังจากทำการเปรียบเทียบ ซึ่งจะช่วยให้คุณซิงโครไนซ์การสลับ PagedList กับการอัปเดต UI อื่นๆ ได้ b/73781068 PagedList.getLoadedCount()เพื่อให้คุณทราบว่ามีรายการอยู่ในหน่วยความจำกี่รายการ โปรดทราบว่าค่าที่ส่งคืนจะเท่ากับ.size()เสมอหากปิดใช้ตัวยึดตำแหน่ง
การแก้ไขข้อบกพร่อง
- แก้ไขเงื่อนไขการแข่งขันเมื่อทำการเปรียบเทียบหากมีการนำรายการกลับมาใช้ซ้ำ b/111591017
PagedList.loadAround()จะแสดงIndexOutOfBoundsExceptionเมื่อดัชนีไม่ถูกต้อง ก่อนหน้านี้แอปอาจขัดข้องโดยมีข้อยกเว้นอื่นๆ ที่ไม่ชัดเจน- แก้ไขกรณีที่ขนาดการโหลดเริ่มต้นที่เล็กมากร่วมกับข้อมูลที่ไม่เปลี่ยนแปลงจะส่งผลให้ไม่มีการโหลดเพิ่มเติม b/113122599
เวอร์ชัน 2.0.0
เวอร์ชัน 2.0.0
1 ตุลาคม 2018
Paging 2.0.0 เปิดตัวพร้อมการแก้ไขข้อบกพร่องเพียงรายการเดียว
การแก้ไขข้อบกพร่อง
- แก้ไขข้อขัดข้องที่อาจเกิดขึ้นเมื่อเลื่อนอย่างรวดเร็วโดยใช้
PositionalDataSourceและตัวยึดตำแหน่ง b/114635383
เวอร์ชัน 2.0.0-beta01
2 กรกฎาคม 2018
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาเนื้อหาหายไปในบางกรณีที่ใช้การเพิ่มด้านหน้า (ปิดใช้ตัวยึดตำแหน่ง, PositionalDataSource) b/80149146
- (เปิดตัวแล้วใน
1.0.1) แก้ไขปัญหาการขัดข้องที่PagedListAdapterและAsyncPagedListDifferไม่สามารถส่งสัญญาณเหตุการณ์การย้าย b/110711937
การอ้างอิงก่อน AndroidX
สำหรับ Paging เวอร์ชันก่อน AndroidX ที่จะกล่าวถึงต่อไป ให้รวมการอ้างอิงต่อไปนี้
dependencies {
def paging_version = "1.0.0"
implementation "android.arch.paging:runtime:$paging_version"
// alternatively - without Android dependencies for testing
testImplementation "android.arch.paging:common:$paging_version"
// optional - RxJava support
implementation "android.arch.paging:rxjava2:$paging_version"
}
เวอร์ชัน 1.0.1
เวอร์ชัน 1.0.1
26 มิถุนายน 2018
Paging 1.0.1 เปิดตัวพร้อมการแก้ไขข้อบกพร่องเพียงรายการเดียวใน runtime เราขอแนะนำให้ใช้ 1.0.1 เพื่อความเสถียร นอกจากนี้ เรายังได้เปิดตัว Paging RxJava2 1.0.1 ซึ่งเหมือนกับ 1.0.0-rc1 ทุกประการ
การแก้ไขข้อบกพร่อง
- แก้ไขข้อขัดข้องที่
PagedListAdapterและAsyncPagedListDifferไม่สามารถส่งสัญญาณเหตุการณ์การย้าย b/110711937
RxJava2 เวอร์ชัน 1.0.0
RxJava2 เวอร์ชัน 1.0.0-rc1
16 พฤษภาคม 2018
Paging RxJava2 1.0.0-rc1 จะเปลี่ยนไปเป็นรุ่นที่อาจได้รับการเผยแพร่โดยไม่มีการเปลี่ยนแปลงจากอัลฟ่ารุ่นแรก
เวอร์ชัน 1.0.0
เวอร์ชัน 1.0.0-rc1
19 เมษายน 2018 รุ่นที่อาจได้รับการเผยแพร่ของการแบ่งหน้า
เราไม่มีปัญหาที่ทราบเพิ่มเติมหรือฟีเจอร์ใหม่ที่กำหนดเวลาไว้สำหรับการเปิดตัว
การแบ่งหน้า1.0.0 โปรดอัปเกรดโปรเจ็กต์เพื่อใช้ 1.0.0-rc1 และช่วยเราทดสอบการใช้งานจริงเพื่อให้เราสามารถเปิดตัว 1.0.0 ที่เสถียรได้
รุ่นนี้ไม่มีการเปลี่ยนแปลงใดๆ โดยจะเหมือนกับ 1.0.0-beta1
เวอร์ชัน 1.0.0-เบต้า1
5 เมษายน 2018
การแบ่งหน้าจะอยู่ในเวอร์ชันเบต้าเป็นระยะเวลาสั้นๆ ก่อนที่จะพัฒนาเป็นเวอร์ชันที่พร้อมเผยแพร่
เราไม่มีแผนที่จะเปลี่ยนแปลง API เพิ่มเติมสำหรับ Paging 1.0 และการเปลี่ยนแปลง API ใดๆ จะต้องมีเกณฑ์ที่สูงมาก
การรองรับ RxJava2 เวอร์ชันอัลฟ่าสำหรับ Paging จะเผยแพร่เป็นโมดูลเสริมแยกต่างหาก (android.arch.paging:rxjava2:1.0.0-alpha1)
และจะมีการกำหนดเวอร์ชันแยกต่างหากชั่วคราวจนกว่าจะเสถียร
ไลบรารีใหม่นี้มีทางเลือก RxJava2 สำหรับ LivePagedListBuilder ซึ่งสร้าง Observable และ Flowable ได้โดยใช้ Scheduler แทน Executor
Kotlin
val pagedItems = RxPagedListBuilder(myDataSource, /* page size */ 50) .setFetchScheduler(myNetworkScheduler) .buildObservable()
Java
Observable<PagedList<Item>> pagedItems = RxPagedListBuilder(myDataSource, /* page size */ 50) .setFetchScheduler(myNetworkScheduler) .buildObservable();
ฟีเจอร์ใหม่
RxPagedListBuilderจะเพิ่มผ่านอาร์ติแฟกต์android.arch.paging:rxjava2ใหม่
การเปลี่ยนแปลง API
การเปลี่ยนแปลง API เพื่อชี้แจงบทบาทของตัวดำเนินการในเครื่องมือสร้าง
เปลี่ยนชื่อ
setBackgroundThreadExecutor()เป็นsetFetchExecutor()(ในPagedList.BuilderและLivePagedListBuilder)เปลี่ยนชื่อ
setMainThreadExecutor()เป็นsetNotifyExecutor()(ในPagedList.Builder)
แก้ไขให้
PagedList.mCallbacksของสมาชิกเป็นแบบส่วนตัว
การแก้ไขข้อบกพร่อง
LivePagedListBuilderจะทริกเกอร์PagedListการโหลดเริ่มต้นในตัวดำเนินการที่ระบุ แทนที่จะเป็นกลุ่มเธรด I/O ของ Arch Componentsแก้ไขลักษณะการทำงานของการลบล้างใน
DataSourceWrapper ภายใน (ใช้เพื่อติดตั้งใช้งานDataSource.mapรวมถึงการโหลดPositionalDataSourceที่ปิดใช้ตัวยึดตำแหน่ง) b/77237534
เวอร์ชัน 1.0.0-alpha7
21 มีนาคม 2018
การแบ่งหน้า 1.0.0-alpha7 จะเปิดตัวพร้อมกับวงจร 1.1.1 เนื่องจาก Paging alpha7 ขึ้นอยู่กับการย้ายคลาส Function ที่กล่าวถึงข้างต้น คุณจะต้องอัปเดตการอ้างอิง lifecycle:runtime เป็น android.arch.lifecycle:runtime:1.1.1
เราวางแผนที่จะให้ alpha7 เป็นรุ่นสุดท้ายก่อนที่การเรียกหน้าจะเข้าสู่รุ่นเบต้า
การเปลี่ยนแปลง API
- ตอนนี้ออบเจ็กต์
DataSource.LoadParamsมีตัวสร้างสาธารณะแล้ว และออบเจ็กต์DataSource.LoadCallbackเป็นนามธรรมแล้ว ซึ่งช่วยให้คุณสามารถห่อหุ้มDataSourceหรือทดสอบDataSourceโดยตรงด้วยการเรียกกลับจำลอง b/72600421 - Mapper สำหรับ DataSource และ DataSource.Factory
map(Function<IN,OUT>)ช่วยให้คุณเปลี่ยนรูป ห่อ หรือตกแต่งผลลัพธ์ที่โหลดโดยDataSourceได้mapByPage(<List<IN>,List<OUT>>)ช่วยให้ทำเช่นเดียวกันกับการประมวลผลแบบกลุ่มได้ (เช่น หากรายการที่โหลดจาก SQL ต้องค้นหาฐานข้อมูลแยกต่างหากเพิ่มเติม ก็สามารถทำได้เป็นกลุ่ม)
- เพิ่ม
PagedList#getDataSource()เป็นวิธีการที่สะดวก b/72611341 - เราได้นำคลาสที่เลิกใช้งานแล้วทั้งหมดออกจาก API รวมถึงส่วนที่เหลือของแพ็กเกจ
recyclerview.extensionsและLivePagedListProvider DataSource.Factoryเปลี่ยนจากอินเทอร์เฟซเป็นคลาสแบบนามธรรมเพื่อให้ฟังก์ชันการทำงานของแผนที่
การแก้ไขข้อบกพร่อง
- เปลี่ยน Builders ให้เป็น final b/70848565
- ตอนนี้เราได้แก้ไขการติดตั้งใช้งาน Room
DataSourceเพื่อรองรับการค้นหาหลายตารางแล้ว โดยการแก้ไขนี้อยู่ใน Room 1.1.0-beta1 ดูด้านบน - แก้ไขข้อบกพร่องที่
BoundaryCallback.onItemAtEndLoadedจะไม่เรียกใช้สำหรับPositionalDataSourceหากเปิดใช้ตัวยึดตำแหน่งและ ขนาดทั้งหมดเป็นจำนวนเท่าที่แน่นอนของขนาดหน้าเว็บ
เวอร์ชัน 1.0.0-alpha5
22 มกราคม 2018
การแก้ไขข้อบกพร่อง
- แก้ไขการโหลดหน้าเว็บเมื่อปิดใช้ตัวยึดตำแหน่ง b/70573345
- การบันทึกเพิ่มเติมเพื่อติดตามข้อบกพร่อง IllegalArgumentException b/70360195 (และการแก้ไขฝั่ง Room โดยคาดการณ์)
- แก้ไขโค้ดตัวอย่าง Javadoc b/70411933, b/71467637