เพจจิ้ง
ตารางนี้แสดงอาร์ติแฟกต์ทั้งหมดในกลุ่ม androidx.paging
| อาร์ติแฟกต์ | รุ่นที่เสถียร | รุ่นที่อาจได้รับการเผยแพร่ | รุ่นเบต้า | รุ่นอัลฟ่า |
|---|---|---|---|---|
| paging-* | 3.5.1 | - | - | - |
| paging-compose | 3.5.1 | - | - | - |
การประกาศทรัพยากร Dependency
หากต้องการเพิ่มทรัพยากร Dependency ในเพจจิ้ง คุณต้องเพิ่มที่เก็บ Maven ของ Google ลงในโปรเจ็กต์ อ่านข้อมูลเพิ่มเติมได้ที่ที่เก็บ Maven ของ Google
เพิ่มทรัพยากร Dependency สำหรับอาร์ติแฟกต์ที่ต้องการในไฟล์ build.gradle สำหรับ
แอปหรือโมดูล
Groovy
dependencies { def paging_version = "3.5.1" 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.5.1" }
Kotlin
dependencies { val paging_version = "3.5.1" 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.5.1") }
ดูข้อมูลเกี่ยวกับการใช้ส่วนขยาย Kotlin ได้ที่เอกสารประกอบ KTX
ดูข้อมูลเพิ่มเติมเกี่ยวกับการพึ่งพาได้ที่เพิ่มการพึ่งพาบิลด์
ความคิดเห็น
ความคิดเห็นของคุณช่วยให้ Jetpack ทำงานได้ดีขึ้น โปรดแจ้งให้เราทราบหากพบปัญหาใหม่หรือมี ไอเดียในการปรับปรุงไลบรารีนี้ โปรดดูปัญหาที่มีอยู่ ในไลบรารีนี้ก่อนสร้างปัญหาใหม่ คุณสามารถโหวตปัญหาที่มีอยู่ได้โดย คลิกปุ่มดาว
ดูข้อมูลเพิ่มเติมได้ในเอกสารประกอบของ Issue Tracker
เวอร์ชัน 3.5
เวอร์ชัน 3.5.1
12 สิงหาคม 2026
androidx.paging:paging-*:3.5.1ระบบจะถอนการอ้างสิทธิ์ เวอร์ชัน 3.5.1 มีการเปลี่ยนแปลงเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่
PagingSource.getRefreshKeyแสดงanchorPositionที่ไม่ถูกต้องซึ่งมีขนาดใหญ่เกินไปเมื่อรีเฟรชหน้าเว็บที่มีตัวคั่นขณะเลื่อนไปยังตัวยึดตำแหน่ง (I475f0, b/516565503)
เวอร์ชัน 3.5.0
6 พฤษภาคม 2026
androidx.paging:paging-*:3.5.0ระบบจะถอนการอ้างสิทธิ์ เวอร์ชัน 3.5.0 มีการเปลี่ยนแปลงเหล่านี้
การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 3.4.0:
เพิ่มโอเปอเรเตอร์
Flow<PagingData>.asItemSnapshotListFlowเพื่อแปลงFlow<PagingData>เป็นFlow<ItemSnapshotList>ซึ่งหมายความว่าตอนนี้คุณสามารถเข้าถึงข้อมูลที่โหลดแล้วนอกเลเยอร์ UI ได้แล้ว ซึ่งจะช่วยให้คุณรวมFlow<ItemSnapshotList>กับแหล่งข้อมูลอื่นๆ แคชและแก้ไขข้อมูลที่แบ่งหน้าในเครื่อง หรือแสดงข้อมูลที่แบ่งหน้าเป็นส่วนหนึ่งของสถานะ UI และอื่นๆ ได้เพิ่มฟังก์ชันส่วนขยาย
Pager.appendและPager.prependเพื่อโหลดข้อมูลเพิ่มเติมด้วยตนเองโดยไม่ต้องเลื่อนเพิ่มฟังก์ชันส่วนขยาย
Pager.refreshและPaging.retryเพื่อกู้คืนจากข้อผิดพลาดในการโหลดเมื่อใช้asItemSnapshotListFlowAPI
เวอร์ชัน 3.5.0-rc01
22 เมษายน 2026
androidx.paging:paging-*:3.5.0-rc01ระบบจะถอนการอ้างสิทธิ์ เวอร์ชัน 3.5.0-rc01 มีการเปลี่ยนแปลงเหล่านี้
ไม่มีการเปลี่ยนแปลง
- ไม่มีการเปลี่ยนแปลงที่โดดเด่นจากเวอร์ชัน
3.5.0-beta01
เวอร์ชัน 3.5.0-beta01
8 เมษายน 2026
androidx.paging:paging-*:3.5.0-beta01ระบบจะถอนการอ้างสิทธิ์ เวอร์ชัน 3.5.0-beta01 มีการเปลี่ยนแปลงเหล่านี้
การเปลี่ยนแปลง API
- เราได้เปลี่ยนชื่อ
Flow<PagingData>.asStateAPI เป็นFlow<PagingData>.asItemSnapshotListFlow(I0dc11, b/496548025)
เวอร์ชัน 3.5.0-alpha01
11 มีนาคม 2026
androidx.paging:paging-*:3.5.0-alpha01ระบบจะถอนการอ้างสิทธิ์ เวอร์ชัน 3.5.0-alpha01 มีการเปลี่ยนแปลงเหล่านี้
ฟีเจอร์ใหม่
ตอนนี้อาร์ติแฟกต์
paging-commonมีตัวดำเนินการโฟลว์asStateใหม่ในFlow<PagingData>เพื่อแปลงเป็นFlow<ItemSnapshotList>ซึ่งจะปลดล็อกความสามารถต่างๆ เช่น- รวมโฟลว์ของ
ItemSnapshotListกับแหล่งข้อมูลอื่นๆ - แชร์โฟลว์กับผู้รวบรวมข้อมูลหลายรายโดยไม่ต้อง
cachedIn - แคชข้อมูลที่แบ่งหน้าไว้ในเครื่อง
- แก้ไขข้อมูลที่แบ่งหน้าในหน่วยความจำ
- แสดงข้อมูลที่แบ่งหน้าเป็นส่วนหนึ่งของสถานะ UI
// In your ViewModel val pager = Pager(pagingConfig, pagingSourceFactory) val pagerFlow = pager.flow.asState() // alterantively convert the flow to a SharedFlow val pagerFlow = pager.flow.asState().stateIn() // In presenter layer val snapshotFlow = viewModel.pagerFlow.collectAsStateWithLifecycle(initialList) val snapshot = itemsFlow.value LazyColumn { items(items = snapshot.items) { ... } }- รวมโฟลว์ของ
อาร์ติแฟกต์
paging-commonยังเพิ่ม APIPager.appendและPager.prependเพื่อทริกเกอร์การโหลดด้วยตนเองที่ขอบของรายการที่โหลด- เมื่อใช้กับ
paging-runtimeหรือpaging-composeจะเป็นอีกวิธีในการโหลดข้อมูลเพิ่มเติมนอกเหนือจากการเลื่อน - เมื่อใช้กับ
asStateAPI ใหม่ จะเป็นวิธีเดียวในการโหลดข้อมูลเพิ่มเติม
LazyColumn { item { /** * Load more items when users scroll near the top of loaded items. */ LaunchedEffect(viewModel) { viewModel.prepend() } } items(snapshot.items) { item -> Text("Item: $item") } item { /** * Load more items when users scroll near the bottom of loaded items. */ LaunchedEffect(viewModel) { viewModel.append() } } }- เมื่อใช้กับ
เพิ่ม
Pager.refreshและPager.retryเพื่อกู้คืนจากข้อผิดพลาดในการโหลดเมื่อใช้asStateAPI ดูตัวอย่างการใช้งาน API ใหม่เพิ่มเติมได้ที่เอกสารนี้ (I1e1e9, If3c87, Idbd48, Id1e1d, I816fe)
เวอร์ชัน 3.4
เวอร์ชัน 3.4.2
11 มีนาคม 2026
androidx.paging:paging-*:3.4.2ระบบจะถอนการอ้างสิทธิ์ เวอร์ชัน 3.4.2 มีการเปลี่ยนแปลงเหล่านี้
ไม่มีการเปลี่ยนแปลง
- รุ่นนี้ไม่มีการเปลี่ยนแปลง API หรือลักษณะการทำงานจากเวอร์ชัน 3.4.1
เวอร์ชัน 3.4.1
11 กุมภาพันธ์ 2026
androidx.paging:paging-*:3.4.1ระบบจะถอนการอ้างสิทธิ์ เวอร์ชัน 3.4.1 มีการเปลี่ยนแปลงเหล่านี้
การอัปเดตทรัพยากร Dependency
- อัปเดตทรัพยากร Dependency ของ Guava ใน paging-guava จากเวอร์ชัน 31.1 เป็น 32.0.1
เวอร์ชัน 3.4.0
28 มกราคม 2026
androidx.paging:paging-*:3.4.0ระบบจะถอนการอ้างสิทธิ์ เวอร์ชัน 3.4.0 มีการเปลี่ยนแปลงเหล่านี้
การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 3.3.0:
- เพิ่มเป้าหมาย KMP ลงใน
paging-common,paging-testingและpaging-composeโดยรวมแล้วตอนนี้ทั้งหมดรองรับ JVM(Android และเดสก์ท็อป), Native (Linux, iOS, watchOS, tvOS, macOS, MinGW) และเว็บ (JavaScript, WasmJS) paging-common,paging-testingและpaging-composeได้นำการรองรับmacosX64,iosX64,watchosX64และtvosX64ออกเพื่อให้สอดคล้องกับการเลิกใช้งานเป้าหมาย macosX64 ของ Jetbrains- เพิ่ม
PagingStateAPIclosestItemAroundPositionใหม่เพื่อดึงข้อมูลรายการที่โหลดซึ่งอยู่ใกล้ตำแหน่งเป้าหมายมากที่สุดและตรงกับตัวบ่งชี้อินพุต ซึ่งใช้เพื่อสร้างคีย์การรีเฟรชตามรายการได้ในกรณีที่รายการที่เหมาะแก่การยึดเหนี่ยวอยู่ใกล้ๆ แต่ไม่ได้อยู่ในตำแหน่งเป้าหมายที่แน่นอน
เวอร์ชัน 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 Multiplatform ใหม่ ได้แก่watchos,tvosและlinuxArm64(90c9768), (53e0eca)
เวอร์ชัน 3.3.1
24 กรกฎาคม 2024
androidx.paging:paging-*:3.3.1 ระบบจะถอนการอ้างสิทธิ์ เวอร์ชัน 3.3.1 มีการเปลี่ยนแปลงเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่
AsyncPagingDataDifferหรือ API ที่สร้างขึ้นบน เช่นPagingDataAdapterที่ใช้กับRecyclerViewจะไม่สามารถทริกเกอร์การโหลดเพิ่มเติมเมื่อแหล่งข้อมูลสำรองรีเฟรชขณะเลื่อน (I60ca5, b/352586078) - แก้ไขข้อขัดข้องที่เกิดขึ้นเมื่อนำรายการออกจากแหล่งข้อมูลสำรองขณะเลื่อน
RecyclerViewโดยใช้PagingDataAdapterหรือAsyncPagingDataDiffer(I8c65a, b/347649763)
เวอร์ชัน 3.3.0
14 พฤษภาคม 2024
androidx.paging:paging-*:3.3.0ระบบจะถอนการอ้างสิทธิ์ เวอร์ชัน 3.3.0 มีการเปลี่ยนแปลงเหล่านี้
การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 3.2.0
- ตอนนี้
PagingDataPresenterเป็นชั้นเรียนสาธารณะแล้ว ตอนนี้คุณสร้างการนำเสนอแบบหลายแพลตฟอร์มได้โดยใช้PagingDataPresenterแทนที่จะต้องใช้ Paging API ภายในหรือ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 สำหรับโค้ดทั่วไปแล้ว (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)) วิธีแก้ปัญหานี้ใช้ได้กับ Flow ที่ทำได้เท่านั้น (เช่นflowOf(PagingData.from(...))) สำหรับ Flow ที่ทำไม่ได้ (เช่น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>>เพื่อส่งไปยัง PagerList<Value>>แต่ละรายการที่ปล่อยออกมาจาก Flow จะแสดงถึงการสร้างข้อมูลที่แบ่งเป็นหน้า ซึ่งช่วยให้ทดสอบการแบ่งหน้าได้ เช่นPagingDataการแปลงโดยการจำลองแหล่งข้อมูลเพื่อให้ Pager รวบรวมข้อมูล (I6f230, b/235528239) เราได้ขยาย
paging-testingอาร์ติแฟกต์ด้วย API ใหม่ที่เหมาะสำหรับการยืนยันว่าข้อมูลที่อยู่ในFlow<PagingData<T>>นั้นถูกต้อง ซึ่งสามารถใช้เพื่อยืนยันเอาต์พุตของFlow<PagingData<T>>จากเลเยอร์ ViewModel ได้ เป็นต้นซึ่งทำได้ผ่าน
asSnapshotส่วนขยาย Kotlin ในFlow<PagingData<Value>>ซึ่งจะแปลFlow<PagingData<Value>>เป็นList<Value>โดยตรง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)
การมีส่วนร่วมจากภายนอก
- อัปเดต :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>.flowableAPI ไม่ใช่เวอร์ชันทดลองอีกต่อไป- การเปลี่ยนแปลงลักษณะการทำงานของ
LoadState- ตอนนี้
endOfPaginationReachedมีราคาfalseสำหรับLoadType.REFRESHทั้งPagingSourceและRemoteMediator LoadStatesจากการแบ่งหน้าจะรอค่าที่ถูกต้องจากทั้งPagingSourceและRemoteMediatorก่อนที่จะส่งต่อ ตอนนี้PagingDataรุ่นใหม่จะเริ่มต้นด้วยLoadingเสมอเมื่อรีเฟรชแทนที่จะรีเซ็ตเป็นNotLoadingอย่างไม่ถูกต้องในบางกรณี.loadStateFlowและ.addLoadStateListenerใน API ของผู้นำเสนอจะไม่ส่งCombinedLoadStatesเริ่มต้นที่มีการตั้งค่าสถานะตัวกลางเป็นnullซ้ำอีกต่อไป
- ตอนนี้
- การยกเลิกในรุ่นที่ผ่านมาจะเกิดขึ้นอย่างรวดเร็วเมื่อมีการยกเลิก / สร้างใหม่ คุณไม่จำเป็นต้องใช้
.collectLatestในFlow<PagingData>อีกต่อไป แม้ว่าเราจะยังคงแนะนำให้ทำเช่นนั้นก็ตาม PagingSource.LoadResult.Invalidได้รับการเพิ่มเป็นประเภทการแสดงผลใหม่จากPagingSource.loadซึ่งทำให้เพจจิ้งทิ้งคำขอโหลดที่รอดำเนินการหรือในอนาคตไปยังPagingSourceนี้และทำให้คำขอดังกล่าวไม่ถูกต้อง ประเภทการแสดงผลนี้ออกแบบมาเพื่อจัดการข้อมูลที่อาจไม่ถูกต้องหรือไม่มีอัปเดตซึ่งอาจส่งคืนจากฐานข้อมูลหรือเครือข่าย- เพิ่ม API ของผู้นำเสนอ
.onPagesPresentedและ.addOnPagesUpdatedListenerซึ่งจะทริกเกอร์พร้อมกันเมื่อมีการนำเสนอหน้าต่างๆ ใน UI การอัปเดตหน้าเว็บอาจเกิดขึ้นในสถานการณ์ต่อไปนี้- การโหลด PagingData รุ่นใหม่ครั้งแรกเสร็จสมบูรณ์ ไม่ว่ารุ่นใหม่จะมีการเปลี่ยนแปลงรายการที่แสดงหรือไม่ก็ตาม เช่น รุ่นใหม่ที่โหลดครั้งแรกเสร็จสมบูรณ์โดยไม่มีการอัปเดตเนื่องจากรายการเหมือนกันทุกประการจะยังคงทริกเกอร์การเรียกกลับนี้
- ระบบจะแทรกหน้า แม้ว่าหน้าแทรกจะไม่มีรายการใหม่ก็ตาม
- ระบบจะทิ้งหน้าเว็บ แม้ว่าหน้าเว็บที่ทิ้งจะว่างเปล่าก็ตาม
เวอร์ชัน 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
Flow<PagingData>.observableและFlow<PagingData>.flowableAPI ไม่ใช่เวอร์ชันทดลองอีกต่อไป (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
- การลงทะเบียน Listener loadState ใหม่หรือ Collector ใหม่ใน
.loadStateFlowจะไม่ปล่อยค่าปัจจุบันในทันทีอีกต่อไป หากยังไม่ได้รับCombinedLoadStatesจริงจากPagingDataกรณีนี้อาจเกิดขึ้นหากมีการเริ่มตัวรวบรวมหรือ 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 กับ API PagedList ของ Paging2 ระบบจะยกเลิกการเชื่อมต่อ PagedList ทันที ซึ่งจะหยุดความพยายามในการโหลดข้อมูลเพิ่มเติมใน PagedList นี้ และ ทริกเกอร์การลบล้างใน PagingSource
LoadResult เป็นคลาสที่ปิดผนึก ซึ่งหมายความว่านี่เป็นการเปลี่ยนแปลงที่ แหล่งที่มาไม่เข้ากัน ดังนั้น Use Case ที่ใช้ผลลัพธ์ของ PagingSource.load โดยตรงจะต้องจัดการ LoadResult.Invalid ในเวลาคอมไพล์ ตัวอย่างเช่น ผู้ใช้ Kotlin ที่ใช้ประโยชน์จาก exhaustive-when เพื่อตรวจสอบประเภทการแสดงผลจะต้องเพิ่มการตรวจสอบ สำหรับประเภทที่ไม่ถูกต้อง (Id6bd3, b/191806126, b/192013267)
การแก้ไขข้อบกพร่อง
- ตอนนี้การเรียกกลับการลบล้างที่เพิ่มผ่าน PagingSource.registerInvalidatedCallback หรือ DataSource.addInvalidatedCallback จะทริกเกอร์โดยอัตโนมัติหากมีการลงทะเบียนใน PagingSource / DataSource ที่ไม่ถูกต้องอยู่แล้ว ซึ่งจะช่วยแก้ไขปัญหาภาวะแข่งขันที่ทำให้เพจจิ้งทิ้งสัญญาณการลบล้างและค้างเมื่อระบุแหล่งที่มาซึ่งไม่ถูกต้องอยู่แล้วในระหว่างการโหลดครั้งแรก นอกจากนี้ ตอนนี้ระบบจะนำ การเรียกกลับ invalidate ออกอย่างถูกต้องหลังจากที่ทริกเกอร์แล้ว เนื่องจากรับประกันได้ว่าจะมีการเรียกใช้เพียงครั้งเดียวเท่านั้น (I27e69)
- การส่งค่าเริ่มต้นของตัวยึดตำแหน่ง (InitialPagedList) จากสตรีม PagedList ที่สร้างขึ้นใหม่ เช่น LivePagedListBuilder หรือ RxPagedListBuilder จะไม่ล้างข้อมูลที่โหลดไว้ก่อนหน้านี้อีกต่อไป
เวอร์ชัน 3.1.0-alpha02
1 กรกฎาคม 2021
androidx.paging:paging-*:3.1.0-alpha02 ระบบจะถอนการอ้างสิทธิ์ เวอร์ชัน 3.1.0-alpha02 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
เพิ่มเครื่องมือฟัง onPagesPresented และ API ของ Flow Presenter ซึ่งจะทริกเกอร์ทันทีหลังจากอัปเดตหน้าที่นำเสนอใน UI
เนื่องจากการอัปเดตเหล่านี้จะซิงโครไนซ์กับ UI คุณจึงเรียกใช้เมธอดของอแดปเตอร์ เช่น .snapshot, .getItemCount เพื่อตรวจสอบสถานะหลังจากใช้การอัปเดตแล้วได้ โปรดทราบว่าเราปล่อยให้มีการเรียกใช้ .snapshot() อย่างชัดเจนเนื่องจากอาจมีค่าใช้จ่ายสูงหากทำทุกครั้งที่มีการอัปเดต
การอัปเดตหน้าเว็บอาจเกิดขึ้นในสถานการณ์ต่อไปนี้
- การโหลด PagingData รุ่นใหม่ครั้งแรกเสร็จสมบูรณ์ ไม่ว่ารุ่นใหม่จะมีรายการที่แสดงที่มีการเปลี่ยนแปลงหรือไม่ก็ตาม เช่น การสร้างใหม่ที่โหลดครั้งแรกเสร็จสมบูรณ์ โดยไม่มีการอัปเดตเนื่องจากรายการเหมือนกันทุกประการจะยังคง ทริกเกอร์การเรียกกลับนี้
- ระบบจะแทรกหน้า แม้ว่าหน้าแทรกจะไม่มีรายการใหม่ ก็ตาม
- ระบบจะทิ้งหน้า แม้ว่าหน้าดังกล่าวจะว่างเปล่า (I272c9, b/189999634)
การแก้ไขข้อบกพร่อง
- การเข้าถึง PagedList.dataSource จากค่าเริ่มต้นที่สร้างโดย LivePagedList หรือ RxPagedList จะไม่ทำให้เกิด IllegalStateException (I96707) อย่างไม่ถูกต้องอีกต่อไป
เวอร์ชัน 3.1.0-alpha01
2 มิถุนายน 2021
androidx.paging:paging-*:3.1.0-alpha01ระบบจะถอนการอ้างสิทธิ์ เวอร์ชัน 3.1.0-alpha01 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- คลาสที่จัดโดย
paging-rxjava3จะอยู่ภายใต้แพ็กเกจandroidx.paging.rxjava3เพื่อไม่ให้ขัดแย้งกับpaging-rxjava2(Ifa7f6)
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่บางครั้งการแบ่งหน้าจะส่งเหตุการณ์ no-op differ ไปยัง RecyclerView ซึ่งอาจทำให้ Listener บางรายการทริกเกอร์ ก่อนเวลา (Ic507f, b/182510751)
การมีส่วนร่วมจากภายนอก
- เพิ่ม API ความเข้ากันได้ของ PagedList ที่เลิกใช้งานแล้วลงในอาร์ติแฟกต์ rxjava3 (Id1ce2, b/182497591)
Paging Compose เวอร์ชัน 1.0.0
เวอร์ชัน 1.0.0-alpha20
24 พฤษภาคม 2023
androidx.paging:paging-compose:1.0.0-alpha20ระบบจะถอนการอ้างสิทธิ์ เวอร์ชัน 1.0.0-alpha20 มีคอมมิตต่อไปนี้
ฟีเจอร์ใหม่
- ตอนนี้ Paging Compose รองรับการแสดงตัวอย่างรายการข้อมูลจำลองโดยการสร้าง
PagingData.from(fakeData)และห่อPagingDataนั้นในMutableStateFlow(เช่นMutableStateFlow(PagingData.from(listOf(1, 2, 3)))) การใช้ข้อมูลดังกล่าวเป็นอินพุตใน@Previewการเรียกใช้collectAsLazyPagingItems()จะแสดงLazyPagingItemsที่แสดงตัวอย่างได้ (I8a78d, b/194544557)
การแก้ไขข้อบกพร่อง
- ตอนนี้ข้อมูลที่แคชจาก
pager.flow.cachedInซึ่งรวบรวมไว้ในLazyPagingItemsจะพร้อมใช้งานทันทีหลังจากการคืนค่าสถานะโดยไม่ต้องมีการรวบรวมข้อมูลแบบไม่พร้อมกัน ซึ่งหมายความว่าข้อมูลที่แคชไว้จะพร้อมสำหรับการนำเสนอทันทีที่จัดองค์ประกอบครั้งแรกหลังจากกู้คืนสถานะแล้ว (I97a60, b/177245496)
เวอร์ชัน 1.0.0-alpha19
3 พฤษภาคม 2023
androidx.paging:paging-compose:1.0.0-alpha19ระบบจะถอนการอ้างสิทธิ์ เวอร์ชัน 1.0.0-alpha19 มีคอมมิตเหล่านี้
รองรับเลย์เอาต์แบบ Lazy ทั้งหมด
ก่อนหน้านี้ 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)
การอัปเดตทรัพยากร Dependency
- Paging Compose ได้อัปเดตทรัพยากร Dependency จาก Compose 1.0.5 เป็น Compose 1.2.1 แล้ว (Ib1918, b/255283378)
เวอร์ชัน 1.0.0-alpha18
8 กุมภาพันธ์ 2023
androidx.paging:paging-compose:1.0.0-alpha18 จะได้รับการเผยแพร่โดยไม่มีการเปลี่ยนแปลง เวอร์ชัน 1.0.0-alpha18 มีคอมมิตเหล่านี้
เวอร์ชัน 1.0.0-alpha17
24 ตุลาคม 2022
androidx.paging:paging-compose:1.0.0-alpha17ระบบจะถอนการอ้างสิทธิ์ เวอร์ชัน 1.0.0-alpha17 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- เพิ่มการรองรับ
CoroutineContextที่กำหนดเองเมื่อโทรหาcollectLazyPagingItems(I7a574, b/243182795, b/233783862)
เวอร์ชัน 1.0.0-alpha16
10 สิงหาคม 2022
androidx.paging:paging-compose:1.0.0-alpha16ระบบจะถอนการอ้างสิทธิ์ เวอร์ชัน 1.0.0-alpha16 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้ Paging มีบันทึกผ่านคลาส
LazyPagingItemsเพื่อแสดงข้อมูลการแก้ไขข้อบกพร่องที่รวบรวมจาก PagingData - คุณเปิดใช้บันทึกได้ผ่านคำสั่ง
adb shelladb 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 ใหม่ที่จะช่วยปรับปรุงสิ่งต่อไปนี้
- การรองรับโครูทีนและ Flow ของ Kotlin อย่างเต็มรูปแบบ
- การสนับสนุนสำหรับการยกเลิก
- สัญญาณสถานะการโหลดและข้อผิดพลาดในตัว
- ฟังก์ชันลองอีกครั้ง + รีเฟรช
- เราได้รวมคลาสย่อย DataSource ทั้ง 3 คลาสไว้ในคลาส PagingSource เดียว
- การเปลี่ยนรูปแบบหน้าเว็บที่กำหนดเอง รวมถึงการเปลี่ยนรูปแบบในตัวสำหรับการเพิ่มตัวคั่น
- ส่วนหัวและส่วนท้ายของสถานะการโหลด
เวอร์ชัน 3.0.0-rc01
21 เมษายน 2021
androidx.paging:paging-*:3.0.0-rc01ระบบจะถอนการอ้างสิทธิ์ เวอร์ชัน 3.0.0-rc01 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่บางครั้งการแบ่งหน้าจะส่งเหตุการณ์ no-op differ ไปยัง RecyclerView ซึ่งอาจทำให้ Listener บางรายการทริกเกอร์ ก่อนเวลา (Ic507f, b/182510751)
เวอร์ชัน 3.0.0-beta03
24 มีนาคม 2021
androidx.paging:paging-*:3.0.0-beta03ระบบจะถอนการอ้างสิทธิ์ เวอร์ชัน 3.0.0-beta03 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- เราได้ปรับปรุงวิธีจัดการตัวยึดตำแหน่งเมื่อโหลดรายการซ้ำเพื่อป้องกันไม่ให้ RecyclerView ข้ามไปอย่างไม่คาดคิด ดูรายละเอียดได้ที่ NullPaddedDiffing.md (If1490, b/170027529, b/177338149)
- ตัวสร้าง PagedList ต่างๆ (เส้นทางการทำงานแบบเดิมเพื่อความเข้ากันได้) จะไม่เรียก
DataSource.Factory.create()ในเทรดหลักอย่างไม่ถูกต้องพร้อมกันอีกต่อไปเมื่อมีการเรียก.build()(b/182798948)
เวอร์ชัน 3.0.0-beta02
10 มีนาคม 2021
androidx.paging:paging-*:3.0.0-beta02ระบบจะถอนการอ้างสิทธิ์ เวอร์ชัน 3.0.0-beta02 มีคอมมิตต่อไปนี้
การเปลี่ยนแปลง API
- ตอนนี้ส่วนขยาย Rx3 จะเผยแพร่ข้อกำหนดในการเลือกใช้
@ExperimentalCoroutinesApiอย่างถูกต้องแล้ว ก่อนหน้านี้มีการทำเครื่องหมายในเมธอด@getซึ่งคอมไพเลอร์ Kotlin จะไม่สนใจเนื่องจาก https://youtrack.jetbrains.com/issue/KT-45227 (I5733c)
การแก้ไขข้อบกพร่อง
- บังคับใช้ข้อจำกัดในการใช้งาน API เวอร์ชันทดลองแบบสาธารณะ (I6aa29, b/174531520)
- แก้ไขข้อบกพร่องที่ทำให้
PagingStateเป็นnullเสมอเมื่อมีการเรียกการรีเฟรชจากระยะไกล - แก้ไขข้อบกพร่องที่หน้าว่างซึ่ง PagingSource ส่งคืนอาจป้องกันไม่ให้ Paging ดึงข้อมูลอีกครั้งเพื่อตอบสนอง
prefetchDistanceซึ่งทำให้ Paging "ค้าง"
เวอร์ชัน 3.0.0-beta01
10 กุมภาพันธ์ 2021
androidx.paging:paging-*:3.0.0-beta01ระบบจะถอนการอ้างสิทธิ์ เวอร์ชัน 3.0.0-beta01 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- ตอนนี้ Wrapper Rx2 และ Rx3 จะแสดงคำอธิบายประกอบเวอร์ชันทดลองที่ขึ้นอยู่กับคำอธิบายประกอบนั้น หากคุณใช้ Wrapper ความเข้ากันได้ของ Rx ใน paging-rxjava2 หรือ
paging-rxjava3 ตอนนี้คุณจะต้องใส่คำอธิบายประกอบการใช้งานด้วย
@OptIn(ExperimentalCoroutinesApi::class)(Ib1f9d)
การแก้ไขข้อบกพร่อง
- แก้ไขข้อผิดพลาด
IndexOutOfBoundsException: Inconsistency detectedที่บางครั้งเกิดขึ้นเมื่อใช้ API 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()ควรมีการติดตั้งใช้งานจริงที่แสดงผลคีย์ตามตำแหน่งการเลื่อนปัจจุบันของผู้ใช้ ซึ่งจะช่วยให้ Paging โหลดต่อไปได้ โดยมีจุดกึ่งกลางอยู่ที่ Viewport ผ่าน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 มีคอมมิตต่อไปนี้
ฟีเจอร์ใหม่
- เพิ่มการรองรับสถานะที่บันทึกไว้สำหรับกรณีการใช้งานพื้นฐานต่อไปนี้ (การรองรับแบบเต็ม โดยเฉพาะในกรณีแหล่งที่มาแบบเลเยอร์ยังอยู่ระหว่างดำเนินการ)
- โฟลว์ได้รับการแคชและระบบไม่ได้ปิดแอป (เช่น โฟลว์ได้รับการแคชใน 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 }
การแก้ไขข้อบกพร่อง
- endOfPaginationReached สำหรับ RemoteMediator
REFRESHnow correctly propagate to LoadState updates and prevents remoteAPPENDandPREPENDfrom triggering. (I94a3f, b/155290248) - การแสดงรายการที่ว่างเปล่าเนื่องจากหน้าเริ่มต้นว่างเปล่าหรือ
การกรองที่หนักหน่วงจะไม่ทำให้การแบ่งหน้าไม่เริ่มทำงาน
PREPENDหรือAPPENDโหลดอีกต่อไป (I3e702, b/168169730) - แก้ไขปัญหาที่
getRefreshKeyไม่ได้รับการเรียกใช้ใน PagingSource รุ่นต่อๆ ไปเมื่อมีการล้างข้อมูลอย่างรวดเร็ว (I45460, b/170027530)
การมีส่วนร่วมจากภายนอก
- เพิ่มคลาส Abstract ใหม่ชื่อ InvalidatingPagingSourceFactory
พร้อม
.invalidate()API ที่ส่งต่อการเรียก invalidate ไปยัง 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 เนื่องจาก สภาวะการแข่งขัน (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 เนื่องจาก API เหล่านี้มีไว้เพื่อแสดงสถานะของรายการที่แสดงเมื่อมีการรีเฟรช แต่เนื่องจากมีการปรับปรุงเวลาเรียกกลับของ LoadState Flow / Listener และพร็อพเพอร์ตี้ itemCount จึงทำให้ API เหล่านี้ซ้ำซ้อน (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 Javadoc ยังไม่พร้อมใช้งาน ในระหว่างนี้ โปรดใช้คำแนะนำที่ลิงก์ไว้ด้านบนหรือเอกสารประกอบของ 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
Paging 2.1.0 เปิดตัวโดยไม่มีการเปลี่ยนแปลงจาก 2.1.0-rc01
เวอร์ชัน 2.1.0-rc01
6 ธันวาคม 2018
Paging 2.1.0-rc01 เปิดตัวโดยไม่มีการเปลี่ยนแปลงจาก 2.1.0-beta01
เวอร์ชัน 2.1.0-beta01
1 พฤศจิกายน 2018
Paging 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 รุ่นที่อาจได้รับการเผยแพร่ของ Paging
เราไม่มีปัญหาที่ทราบเพิ่มเติมหรือฟีเจอร์ใหม่ที่กำหนดเวลาไว้สำหรับการเปิดตัว Paging 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แก้ไขลักษณะการทำงานที่ไม่ถูกต้องใน Wrapper ภายใน
DataSource(ใช้เพื่อติดตั้งใช้งานDataSource.mapรวมถึงการโหลดPositionalDataSourceที่ปิดใช้ตัวยึดตำแหน่ง) b/77237534
เวอร์ชัน 1.0.0-alpha7
21 มีนาคม 2018
Paging 1.0.0-alpha7 จะเปิดตัวพร้อมกับ Lifecycles 1.1.1 เนื่องจาก Paging alpha7 ขึ้นอยู่กับการย้ายคลาส Function ที่กล่าวถึงข้างต้น คุณจะต้องอัปเดตการอ้างอิง lifecycle:runtime เป็น android.arch.lifecycle:runtime:1.1.1
เราวางแผนที่จะให้ alpha7 เป็นรุ่นสุดท้ายก่อนที่ Paging จะเข้าสู่รุ่นเบต้า
การเปลี่ยนแปลง 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