ตารางนี้แสดงอาร์ติแฟกต์ทั้งหมดในกลุ่ม androidx.paging
| อาร์ติแฟกต์ | รุ่นที่เสถียร | รุ่นที่อาจได้รับการเผยแพร่ | รุ่นเบต้า | รุ่นอัลฟ่า |
|---|---|---|---|---|
| paging-* | 3.5.3 | - | - | - |
| paging-compose | 3.5.3 | - | - | - |
การประกาศทรัพยากร Dependency
หากต้องการเพิ่มทรัพยากร Dependency ในเพจจิ้ง คุณต้องเพิ่มที่เก็บ Maven ของ Google ลงในโปรเจ็กต์ อ่านข้อมูลเพิ่มเติมได้ที่ที่เก็บ Maven ของ Google
เพิ่มทรัพยากร Dependency สำหรับอาร์ติแฟกต์ที่ต้องการในไฟล์ build.gradle สำหรับแอปหรือโมดูล ดังนี้
Groovy
dependencies { def paging_version = "3.5.3" 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.3" }
Kotlin
dependencies { val paging_version = "3.5.3" 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.3") }
ดูข้อมูลเกี่ยวกับการใช้ส่วนขยาย Kotlin ได้ที่เอกสารประกอบ ktx
ดูข้อมูลเพิ่มเติมเกี่ยวกับ Dependency ได้ที่เพิ่ม Dependency ของบิลด์
ความคิดเห็น
ความคิดเห็นของคุณช่วยให้ Jetpack ทำงานได้ดีขึ้น โปรดแจ้งให้เราทราบหากคุณพบปัญหาใหม่หรือมีแนวคิดในการปรับปรุงไลบรารีนี้ โปรดดูปัญหาที่มีอยู่ในคลังนี้ก่อนสร้างปัญหาใหม่ คุณสามารถโหวตปัญหาที่มีอยู่ได้โดยคลิกปุ่มดาว
ดูข้อมูลเพิ่มเติมได้ที่เอกสารประกอบของ Issue Tracker
เวอร์ชัน 3.5
เวอร์ชัน 3.5.3
12 ตุลาคม 2026
androidx.paging:paging-*:3.5.3 เปิดตัวแล้ว เวอร์ชัน 3.5.3 มี คอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
ItemSnapshotListFlowจะไม่แสดงIllegalArgumentExceptionอีกต่อไปเมื่อRemoteMediatorไปถึงจุดสิ้นสุดของการแบ่งหน้าในทิศทางใดทิศทางหนึ่ง และส่วนหัวหรือส่วนท้ายถูกแปลงเป็นตัวคั่นเทอร์มินัล (I821c7, b/566336825)- เมื่อหน้าเว็บที่โหลดเกิน
PagingConfig.maxSizeหน้าเว็บที่โหลดจะไม่ลดลงต่ำกว่า 2 หน้าเพื่อให้มั่นใจว่า Viewport จะมีข้อมูลอย่างเหมาะสม (I037a0, b/565835910)
การมีส่วนร่วมภายนอก
ขอขอบคุณ Igor ที่ส่งการแก้ไขข้อบกพร่อง b/565835910
เวอร์ชัน 3.5.2
7 ตุลาคม 2026
androidx.paging:paging-*:3.5.2 เปิดตัวแล้ว เวอร์ชัน 3.5.2 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
Pager.append()การเรียกใช้ก่อนการรีเฟรชครั้งแรกเสร็จสมบูรณ์จะไม่ทำให้เกิดข้อผิดพลาดNoSuchElementExceptionอีกต่อไป การเรียกใช้เมธอด append จะไม่มีผลใดๆ (Ide387, b/556780796)
เวอร์ชัน 3.5.1
12 สิงหาคม 2569
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>ซึ่งจะปลดล็อกความสามารถต่างๆ เช่น- รวม Flow ของ
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) { ... } }- รวม Flow ของ
อาร์ติแฟกต์
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 ของ 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 และเดสก์ท็อป), เนทีฟ (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)
- การทดสอบการแบ่งหน้าได้เพิ่มเป้าหมาย 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ได้ย้าย API ของ Paging 3 ทั้งหมดไปยัง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 Multiplatform (aosp/2950785)
เวอร์ชัน 3.3.0-alpha03
7 กุมภาพันธ์ 2024
androidx.paging:paging-*:3.3.0-alpha03 เปิดตัวแล้ว เวอร์ชัน 3.3.0-alpha03 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้
PagingDataPresenterเป็นคลาสแบบสาธารณะแล้ว ตอนนี้คุณสร้างผู้บรรยายแบบหลายแพลตฟอร์มบนPagingDataPresenterได้แล้ว โดยไม่ต้องใช้ Paging API ภายในหรือpaging-runtimeของAsyncPagingDataDiffer(Id1f74, b/315214786) - เพิ่มเมธอดตัวช่วย
LoadStatesและCombinedLoadStatesใหม่เพื่อตรวจสอบว่าLoadStatesอยู่ในสถานะข้อผิดพลาดหรือสถานะNotLoadingนอกจากนี้ยังเพิ่ม API ใหม่ที่รอLoadStateFlowจนกว่าการโหลดจะเข้าสู่สถานะNotLoadingหรือสถานะข้อผิดพลาด (Id6c67)
พฤติกรรม
- ตอนนี้
PagingData.empty()จะส่งสถานะNotLoadingโดยค่าเริ่มต้น เว้นแต่จะมีการส่งLoadStatesที่กำหนดเองไปยังตัวสร้าง ซึ่งแตกต่างจากลักษณะการทำงานที่มีอยู่ซึ่งจะไม่ส่งLoadStatesเมื่อส่งไปยังPagingDataAdapterหรือจะส่งสถานะการโหลดเมื่อรวบรวมเป็นLazyPagingItemsเมื่อรวบรวมเป็นLazyPagingItemsตอนนี้ระบบจะแสดงรายการที่ว่างเปล่าทันทีเมื่อเริ่มคอมโพสิชันด้วย (I4d11d, b/301833847)
เวอร์ชัน 3.3.0-alpha02
20 กันยายน 2023
androidx.paging:paging-*:3.3.0-alpha02 เปิดตัวแล้ว เวอร์ชัน 3.3.0-alpha02 มีคอมมิตเหล่านี้
ความเข้ากันได้ของ Kotlin Multiplatform
ตอนนี้ Paging จะจัดส่งอาร์ติแฟกต์ที่เข้ากันได้กับ Kotlin Multiplatform ซึ่งส่วนใหญ่เป็นผลมาจากงานที่อัปสตรีมจากโปรเจ็กต์ multiplatform-paging ของ CashApp ซึ่งจะช่วยให้เราหลีกเลี่ยงความแตกต่างระหว่างที่เก็บทั้ง 2 แห่งและทำให้ที่เก็บทั้งสองเข้ากันได้
paging-commonได้ย้าย API ของ Paging 3 ทั้งหมดไปยัง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 มีคอมมิตต่อไปนี้
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่ API
asSnapshot()ของอาร์ติแฟกต์การทดสอบการแบ่งหน้าจะค้างเมื่อส่ง 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)))) ส่ง Flow นี้ไปยัง Composable@Previewเป็นตัวรับเพื่อให้collectAsLazyPagingItems()แสดงตัวอย่าง - รองรับเลย์เอาต์แบบเลื่อนทั้งหมด เช่น
LazyVerticalGridและHorizontalPagerรวมถึงคอมโพเนนต์แบบเลื่อนที่กำหนดเองจากไลบรารี Wear และ TV ซึ่งทำได้ผ่านเมธอดส่วนขยายLazyPagingItemsระดับต่ำกว่าแบบใหม่itemKeyและitemContentTypeซึ่งช่วยให้คุณใช้พารามิเตอร์keyและcontentTypeกับ APIitemsมาตรฐานที่มีอยู่แล้วสำหรับLazyColumn,LazyVerticalGridรวมถึงพารามิเตอร์ที่เทียบเท่าใน API เช่นHorizontalPager items(lazyPagingItems)และitemsIndexed(lazyPagingItems)ซึ่งรองรับเฉพาะLazyListScopeเลิกใช้งานแล้ว
- รองรับการแสดงตัวอย่างรายการข้อมูลจำลองโดยการสร้าง
- อาร์ติแฟกต์
paging-testingใหม่ซึ่งมี API ที่ออกแบบมาเพื่อการทำ Unit Test ของแต่ละเลเยอร์ในแอปและการผสานรวมกับ 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อินเทอร์เฟซการทำงานใหม่PagingSourceที่ให้พื้นผิว API ที่ชัดเจนกว่า Lambda ก่อนหน้า () -> คุณสามารถใช้โรงงานนี้เพื่อสร้างอินสแตนซ์ของเพจเจอร์ได้
เวอร์ชัน 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เพื่อให้ตรงกับเวอร์ชันของอาร์ติแฟกต์ Paging อื่นๆ ทั้งหมดในตอนนี้
การเปลี่ยนแปลง 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ที่มีอยู่ คุณสามารถใช้โรงงานนี้เพื่อสร้างอินสแตนซ์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) - ย้ายข้อมูลการใช้ประเภทแลมบ์ดา
() -> PagingSource<Key, Value>ของ paging-testing ไปยังประเภท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 ที่ออกแบบมาเพื่อการทำ Unit Test ของแต่ละเลเยอร์ในแอปและการผสานรวมกับ 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()ได้อย่างสะดวก ซึ่งจะช่วยให้ใช้เมธอดไลบรารีมาตรฐาน Kotlinflattenได้โดยอ้อมเมื่อได้รับ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 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้ Paging จะแสดงบันทึกผ่านคลาส
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>.observableAPI และ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 รุ่นใหม่ครั้งแรกเสร็จสมบูรณ์ ไม่ว่ารุ่นใหม่จะมีการเปลี่ยนแปลงรายการที่แสดงหรือไม่ก็ตาม เช่น การสร้างใหม่ที่โหลดครั้งแรกเสร็จสมบูรณ์โดยไม่มีการอัปเดตเนื่องจากรายการเหมือนกันทุกประการจะยังคงทริกเกอร์ Callback นี้
- ระบบจะแทรกหน้าเว็บแม้ว่าหน้าเว็บที่แทรกจะไม่มีรายการใหม่ก็ตาม
- ระบบจะวางหน้าเว็บ แม้ว่าหน้าเว็บที่วางจะว่างเปล่าก็ตาม
เวอร์ชัน 3.1.0-rc01
3 พฤศจิกายน 2021
androidx.paging:paging-*:3.1.0-rc01 เปิดตัวแล้ว เวอร์ชัน 3.1.0-rc01 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- แก้ไขภาวะแข่งขัน + หน่วยความจำรั่วไหลใน .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 จาก Paging จะรอค่าที่ถูกต้องจากทั้ง PagingSource และ RemoteMediator ก่อนที่จะปล่อยลงมาที่สตรีมระหว่างการสร้าง การดำเนินการนี้จะป้องกันไม่ให้ PagingData รุ่นใหม่ส่ง NotLoading ใน CombinedLoadStates.source.refresh หากมีการโหลดอยู่แล้ว ตอนนี้ PagingData รุ่นใหม่จะเริ่มต้นด้วยการโหลดสำหรับสถานะการรีเฟรชอย่างถูกต้องเสมอ แทนที่จะรีเซ็ตเป็น NotLoading อย่างไม่ถูกต้องในบางกรณี
การยกเลิกการสร้างที่ผ่านมาจะเกิดขึ้นทันทีเมื่อมีการยกเลิก / การสร้างใหม่ ไม่จำเป็นต้องใช้ .collectLatest ใน
Flow<PagingData>อีกต่อไป แม้ว่าจะยังคงแนะนำให้ใช้อยู่ก็ตาม (I0b2b5, b/177351336, b/195028524).loadStateFlowและ.addLoadStateListenerใน API ของผู้นำเสนอจะไม่ส่งCombinedLoadStatesเริ่มต้นซ้ำซ้อนอีกต่อไป ซึ่งจะมีการตั้งค่าสถานะสื่อกลางเป็นnullและสถานะแหล่งที่มาเป็นNotLoading(endOfPaginationReached = false)เสมอ ซึ่งหมายความว่า- ระบบจะป้อนข้อมูลสถานะตัวกลางเสมอหากคุณใช้ RemoteMediator
- การลงทะเบียนเครื่องมือฟัง loadState ใหม่หรือเครื่องมือรวบรวมใหม่ใน
.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 รายการที่ 3 ซึ่งก็คือ LoadResult.Invalid ลงใน PagingSource เมื่อ PagingSource.load แสดงผล LoadResult.Invalid การแบ่งหน้าจะทิ้งข้อมูลที่โหลดและทำให้ PagingSource ไม่ถูกต้อง ประเภทการแสดงผลนี้ออกแบบมาเพื่อจัดการข้อมูลที่อาจไม่ถูกต้องหรือล้าสมัยซึ่งอาจแสดงผลจากฐานข้อมูลหรือเครือข่าย
ตัวอย่างเช่น หากมีการเขียนลงในฐานข้อมูลพื้นฐาน แต่ PagingSource ไม่ทำให้เป็นโมฆะได้ทันเวลา อาจทำให้ได้ผลลัพธ์ที่ไม่สอดคล้องกันหากการใช้งานขึ้นอยู่กับ ความเปลี่ยนแปลงไม่ได้ของชุดข้อมูลสำรองที่โหลดจาก (เช่น การใช้งาน DB รูปแบบ 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)
การแก้ไขข้อบกพร่อง
- ตอนนี้ Callback การทำให้เป็นโมฆะที่เพิ่มผ่าน PagingSource.registerInvalidatedCallback หรือ DataSource.addInvalidatedCallback จะทริกเกอร์โดยอัตโนมัติหากลงทะเบียนใน PagingSource / DataSource ที่ไม่ถูกต้องอยู่แล้ว ซึ่งจะช่วยแก้ไขปัญหาภาวะแข่งขันที่ทำให้เพจจิ้งทิ้งสัญญาณการลบล้างและค้างเมื่อระบุแหล่งที่มาซึ่งไม่ถูกต้องอยู่แล้วในระหว่างการโหลดครั้งแรก นอกจากนี้ ตอนนี้ระบบจะนำ การเรียกกลับ invalidate ออกอย่างถูกต้องหลังจากทริกเกอร์แล้ว เนื่องจากรับประกันได้ว่าจะเรียกใช้ไม่เกิน 1 ครั้ง (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)
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่บางครั้ง Paging จะส่งเหตุการณ์ 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 กับเลย์เอาต์แบบเลื่อนขี้เกียจอื่นๆ เช่น LazyVerticalGrid, HorizontalPager หรือคอมโพเนนต์แบบเลื่อนขี้เกียจที่กำหนดเองอื่นๆ ที่ไลบรารี Wear และ TV มีให้ การแก้ไขความไม่ยืดหยุ่นนี้คือการอัปเดตหลักสำหรับการเปิดตัวครั้งนี้
เราจำเป็นต้องสร้าง API ในเลเยอร์อื่นเพื่อรองรับเลย์เอาต์แบบ Lazy มากขึ้น แทนที่จะจัดเตรียม API items ที่กำหนดเองสำหรับเลย์เอาต์แบบ Lazy แต่ละรายการ ตอนนี้ 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 ได้อัปเดตการอ้างอิงจาก 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.prepend,CombinedLoadStates.appendให้เปลี่ยนจากLoadingเป็นNotLoadingหลังจากที่สถานะการโหลดของทั้งสื่อกลางและแหล่งที่มาเป็นNotLoadingเพื่อให้แน่ใจว่ามีการใช้การอัปเดตระยะไกลแล้ว (I65619)
เวอร์ชัน 1.0.0-alpha03
2 ธันวาคม 2020
androidx.paging:paging-compose:1.0.0-alpha03 เปิดตัวแล้ว เวอร์ชัน 1.0.0-alpha03 มีคอมมิตต่อไปนี้
- อัปเดตให้ตรงกับ Compose 1.0.0-alpha08
เวอร์ชัน 1.0.0-alpha02
11 พฤศจิกายน 2020
androidx.paging:paging-compose:1.0.0-alpha02 เปิดตัวแล้ว เวอร์ชัน 1.0.0-alpha02 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- เพิ่มเมธอด
.peek(),.snapshot(),.retry()และ.refresh()ลงในLazyPagingItemซึ่งแสดงฟังก์ชันการทำงานเดียวกันกับที่มีในAsyncPagingDataDiffer/PagingDataAdapter(Iddfe8, b/172041660)
เวอร์ชัน 1.0.0-alpha01
28 ตุลาคม 2020
androidx.paging:paging-compose:1.0.0-alpha01 เปิดตัวแล้ว เวอร์ชัน 1.0.0-alpha01 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
อาร์ติแฟกต์ paging-compose ช่วยผสานรวมระหว่างไลบรารีการแบ่งหน้ากับ Jetpack Compose ตัวอย่างการใช้งานง่ายๆ มีดังนี้
@Composable
@OptIn(ExperimentalLazyDsl::class)
fun ItemsDemo(flow: Flow<PagingData<String>>) {
val lazyPagingItems = flow.collectAsLazyPagingItems()
LazyColumn {
items(lazyPagingItems) {
Text("Item is $it")
}
}
}
เวอร์ชัน 3.0.1
เวอร์ชัน 3.0.1
21 กรกฎาคม 2021
androidx.paging:paging-*:3.0.1 เปิดตัวแล้ว เวอร์ชัน 3.0.1 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- การเข้าถึง
PagedList.dataSourceจากค่าเริ่มต้นที่สร้างโดยLivePagedListหรือRxPagedListจะไม่ทำให้เกิด IllegalStateException (I96707) อย่างไม่ถูกต้องอีกต่อไป
เวอร์ชัน 3.0.0
เวอร์ชัน 3.0.0
5 พฤษภาคม 2021
androidx.paging:paging-*:3.0.0 เปิดตัวแล้ว เวอร์ชัน 3.0.0 มีคอมมิตต่อไปนี้
ฟีเจอร์หลักของ 3.0.0
API ที่มีอยู่ส่วนใหญ่จาก Paging 2.x.x ถูกเลิกใช้งานแล้วเพื่อรองรับ Paging 3 API ใหม่ที่จะนำการปรับปรุงต่อไปนี้มาให้
- รองรับโครูทีนและ Flow ของ Kotlin อย่างเต็มที่
- การสนับสนุนการยกเลิก
- สัญญาณสถานะการโหลดและข้อผิดพลาดในตัว
- ฟังก์ชันลองใหม่ + รีเฟรช
- เราได้รวมคลาสย่อย DataSource ทั้ง 3 คลาสไว้ในคลาส PagingSource เดียว
- การเปลี่ยนรูปแบบหน้าเว็บที่กำหนดเอง รวมถึงการเปลี่ยนรูปแบบในตัวสำหรับการเพิ่มตัวคั่น
- กำลังโหลดส่วนหัวและส่วนท้ายของสถานะ
เวอร์ชัน 3.0.0-rc01
21 เมษายน 2021
androidx.paging:paging-*:3.0.0-rc01 เปิดตัวแล้ว เวอร์ชัน 3.0.0-rc01 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่บางครั้งเพจจิ้งจะส่งเหตุการณ์ที่ไม่มีการดำเนินการไปยัง RecyclerView ซึ่งอาจทำให้ 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ผ่านเส้นทางความเข้ากันได้ isInvalidในระหว่างการเริ่มต้นของDataSourceเมื่อใช้ผ่านเส้นทางการทำงานร่วมกันจะเปิดใช้ใน fetchDispatcher อย่างถูกต้องแทนที่จะเป็นในเทรดหลัก การแก้ไขนี้ช่วยแก้ปัญหาIllegalStateExceptionที่เกิดจากการเข้าถึง Db ในชุดข้อความหลักเมื่อใช้การติดตั้งใช้งานPagingSourceของ Room
เวอร์ชัน 3.0.0-alpha13
27 มกราคม 2021
androidx.paging:paging-*:3.0.0-alpha13 เปิดตัวแล้ว เวอร์ชัน 3.0.0-alpha13 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
PagingSource.getRefreshKeyไม่ใช่ฟังก์ชันที่ไม่บังคับให้ใช้แล้ว แต่ตอนนี้เป็นฟังก์ชันนามธรรมที่ไม่มีการใช้งานเริ่มต้น ผู้ใช้ที่ย้ายข้อมูลสามารถเลือกที่จะแสดงผลการติดตั้งใช้งานเริ่มต้นต่อไป ซึ่งจะแสดงผลnullแต่getRefreshKey()ควรมีการติดตั้งใช้งานจริงที่แสดงผลคีย์ตามตำแหน่งการเลื่อนปัจจุบันของผู้ใช้ ซึ่งช่วยให้เพจจิ้งโหลดต่อไปโดยมีจุดศูนย์กลางอยู่ที่วิวพอร์ตผ่านPagingState.anchorPositionหากเป็นไปได้ (I4339a)- ตอนนี้
InvalidatingPagingSourceFactoryเป็นคลาสสุดท้ายแล้ว (Ia3b0a) - อนุญาตให้กำหนดค่าลักษณะการทำงานของตัวคั่นเทอร์มินัล (ส่วนหัว / ส่วนท้าย) ด้วยพารามิเตอร์ SeparatorType เพิ่มเติมที่ไม่บังคับ โดยมี 2 ตัวเลือก
ดังนี้
FULLY_COMPLETE- ลักษณะการทำงานที่มีอยู่ รอให้ทั้ง PagingSource และ RemoteMediator ทำเครื่องหมาย endOfPaginationReached ก่อนเพิ่มตัวคั่น สุดท้าย หากไม่ได้ใช้ RemoteMediator ระบบจะละเว้น loadState ระยะไกล ซึ่งจะมีประโยชน์เป็นหลักในกรณีที่คุณต้องการแสดงตัวคั่นส่วน เฉพาะเมื่อโหลดส่วนนั้นเสร็จสมบูรณ์แล้ว รวมถึงการดึงข้อมูลจาก แหล่งที่มาภายนอก เช่น เครือข่ายSOURCE_COMPLETE- รอให้ PagingSource ทำเครื่องหมาย endOfPaginationReached เท่านั้น แม้ว่าจะใช้ RemoteMediator ก็ตาม ซึ่งจะช่วยให้แสดงส่วนหัวและส่วนท้ายพร้อมกันกับการโหลดครั้งแรก ซึ่งจะช่วยป้องกันไม่ให้ผู้ใช้ต้องเลื่อนเพื่อดูตัวคั่นเทอร์มินัล (Ibe993, b/174700218)
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาหน่วยความจำรั่วไหลที่เกิดขึ้นไม่บ่อยนักเมื่อ PagingSource ไม่ถูกต้องก่อนที่ PageFetcher จะเริ่มโหลดจากแหล่งที่มาดังกล่าว (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 ความเข้ากันได้ของ Paging2.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
REFRESHจะเผยแพร่ไปยังการอัปเดต LoadState อย่างถูกต้อง และป้องกันไม่ให้APPENDและPREPENDระยะไกลทำงาน (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 (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 ของ Callback ที่ไม่ถูกต้องไม่ได้รับการเรียกหลังจากแปลงโดย.mapหรือ.mapByPage(I1f244, b/165313046)
แก้ไขข้อบกพร่อง
- การโต้ตอบของ Paging กับ ViewPager ได้รับการปรับปรุงอย่างมาก กล่าวคือ เพจจิ้งจะไม่ยกเลิกการเรียก
RemoteMediator#loadเนื่องจากหน้าไม่ถูกต้องอีกต่อไป นอกจากนี้ จะไม่มีการส่งคำขอโหลดเพื่อต่อท้าย/นำหน้า หากต้องใช้ REFRESH จนกว่าคำขอ REFRESH จะเสร็จสมบูรณ์ (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
- ตอนนี้โอเปอเรเตอร์ที่ใช้ Guava ของ Async PagingData จะยอมรับ 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 โดยรวมเพื่อแสดงรายการแบบคงที่ในบางสถานะ เช่น ก่อนที่ REFRESH เริ่มต้นจะเสร็จสิ้น หรือเพียงเพื่อทดสอบการเปลี่ยนรูปแบบ (Id134d) - เลิกใช้งาน dataRefresh Flow / Listener API เนื่องจากมีไว้เพื่อแสดงสถานะรายการที่แสดงใน REFRESH แต่ด้วยการปรับปรุงเวลาเรียกกลับของ loadState Flow / Listener และพร็อพเพอร์ตี้ itemCount จึงทำให้เกิดความซ้ำซ้อน (Ia19f3)
- เพิ่ม Wrapper ความเข้ากันได้ของ RxJava3 สำหรับ
PagingSourceและRemoteMediator(I49ef3, b/161480176)
การแก้ไขข้อบกพร่อง
PositionalDataSourceที่แปลงเป็นPagingSourceผ่านตัวช่วยtoPagingSourceFactoryรวมถึงPagingSourceที่สร้างโดย Room จะทำเครื่องหมายตัวเองอย่างถูกต้องเพื่อรองรับการข้าม (I3e84c, b/162161201)- แก้ไขข้อบกพร่องที่การใช้ตัวแปรแบบซิงโครนัสของ submitData
บางครั้งอาจทำให้เกิดการแข่งขันซึ่งทำให้เกิด
ClosedSendChannelException(I4d702, b/160192222)
การมีส่วนร่วมภายนอก
- ขอขอบคุณ Zac Sweers ที่เพิ่ม Wrapper ความเข้ากันได้ของ RxJava3 ในนามของ Slack (I49ef3, b/161480176)
เวอร์ชัน 3.0.0-alpha03
22 กรกฎาคม 2020
androidx.paging:paging-*:3.0.0-alpha03 เปิดตัวแล้ว เวอร์ชัน 3.0.0-alpha03 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- ตอนนี้คอนสตรัคเตอร์สำหรับ PagingState เป็นแบบสาธารณะแล้ว ซึ่งจะช่วยให้การทดสอบการใช้งาน getRefreshKey() ง่ายขึ้น (I8bf15)
- ซ่อนฟังก์ชันแผนที่ Kotlin ของ DataSource จาก Java เพื่อ แก้ไขความคลุมเครือระหว่างตัวแปรเดิมกับตัวแปร Kotlin (If7b23, b/161150011)
- API ที่ซ้ำซ้อนซึ่งมีไว้เพื่ออำนวยความสะดวกให้ผู้ใช้ Kotlin ได้รับการทำเครื่องหมายเป็น @JvmSynthetic (I56ae5)
- เพิ่มโอเวอร์โหลดสำหรับคอนสตรัคเตอร์ของ LoadResult.Page ซึ่งค่าเริ่มต้นของ itemsBefore และ itemsAfter เป็น COUNT_UNDEFINED (I47849)
- ทำให้โอเปอเรเตอร์ PagingData ที่มีอยู่ยอมรับเมธอดการระงับ และเปิดตัวโอเปอเรเตอร์ mapSync, flatMapSync และ filterSync แบบไม่ระงับใหม่สำหรับผู้ใช้ Java เมธอดการเปลี่ยนรูปแบบที่มีอยู่ได้ย้ายไปยังฟังก์ชันส่วนขยายแล้ว ดังนั้นผู้ใช้ Kotlin จะต้องนำเข้าเมธอดดังกล่าว (I34239, b/159983232)
แก้ไขข้อบกพร่อง
- ตอนนี้ Room (และ PositionalDataSource) PagingSources จะแสดงตัวคั่นนำหน้าเป็นส่วนหนึ่งของหน้าแรก เพื่อให้ผู้ใช้ไม่ต้องเลื่อนเพื่อแสดงตัวคั่น (I6f747, b/160257628)
- ตอนนี้การเข้าถึงรายการในตัวยึดตำแหน่งจะทริกเกอร์การโหลด PagingSource อย่างถูกต้องจนกว่าจะมีการส่งคืนหน้าเว็บที่ตรงกับดัชนีที่ขอหลังจากได้รับการแปลงโดย PagingData.filter() (I95625, b/158763195)
- แก้ไขข้อบกพร่องที่บางครั้งการเลื่อนหลังจากที่ PagingSource แสดงข้อผิดพลาดอาจทำให้ PagingDataAdapter.retry() ไม่ลองใหม่ (I1084f, b/160194384)
- แก้ไขปัญหาที่การเข้าถึงรายการหลังจากวางหน้าอาจไม่โหลดหน้า แม้ว่าการเข้าถึงรายการจะอยู่ภายใน prefetchDistance (Ie95ae, b/160038730)
- การตั้งค่า PagingConfig.maxSize จะไม่เปิดใช้ตัวยึดตำแหน่งหลังจากเหตุการณ์การวางอีกต่อไป (I2be29, b/159667766)
เวอร์ชัน 3.0.0-alpha02
24 มิถุนายน 2020
androidx.paging:paging-*:3.0.0-alpha02 เปิดตัวแล้ว เวอร์ชัน 3.0.0-alpha02 มีคอมมิตต่อไปนี้
การเปลี่ยนแปลง API
- เพิ่มโอเวอร์โหลดสำหรับคอนสตรัคเตอร์ของ
PagingConfigที่มีค่าเริ่มต้นทั่วไป (I39c50, b/158576040) - เพิ่มการโอเวอร์โหลดสำหรับตัวสร้างของ
PagingDataAdapterและAsyncPagingDataDifferด้วยค่าเริ่มต้นทั่วไป (Ie91f5) - ตอนนี้ API ของอะแดปเตอร์
dataRefreshFlowและdataRefreshListenerจะส่งบูลีนเพื่อส่งสัญญาณว่าPagingDataว่างเปล่าหรือไม่ (I6e37e, b/159054196) - เพิ่ม RxJava และ Guava API สำหรับ RemoteMediator - RxRemoteMediator และ ListenableFutureRemoteMediator
- เพิ่มตัวช่วยลงใน PagingState สำหรับการเข้าถึงรายการทั่วไป เช่น
isEmpty()และfirstItemOrNull()(I3b5b6, b/158892717)
แก้ไขข้อบกพร่อง
- ตอนนี้ Pager จะตรวจสอบการนำ PagingSource กลับมาใช้ซ้ำในโรงงานเพื่อป้องกันการนำ PagingSource ที่ไม่ถูกต้องกลับมาใช้ซ้ำโดยไม่ตั้งใจ ซึ่งทำให้เกิดข้อผิดพลาดที่ไม่ชัดเจน (I99809, b/158486430)
- ข้อผิดพลาดจาก REFRESH ของ RemoteMediator จะไม่ป้องกันไม่ให้ PagingSource โหลดอีกต่อไป (I38b1b, b/158892717)
- เวอร์ชันที่ไม่ระงับของ
submitDataจะไม่ทำให้เกิดข้อขัดข้องเนื่องจากการรวบรวมพร้อมกันใน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
- รองรับโครูทีนและ Flow ของ Kotlin อย่างเต็มที่
- รองรับการโหลดแบบไม่พร้อมกันด้วยฟังก์ชันระงับ Coroutine, RxJava Single หรือ Guava ListenableFuture
- สถานะการโหลดและสัญญาณข้อผิดพลาดในตัวสำหรับการออกแบบ UI ที่ตอบสนอง รวมถึงฟังก์ชันการลองอีกครั้งและการรีเฟรช
- การปรับปรุงเลเยอร์ที่เก็บ
- อินเทอร์เฟซแหล่งข้อมูลที่เรียบง่ายขึ้น
- การแบ่งหน้าเครือข่าย + ฐานข้อมูลที่เรียบง่าย
- การสนับสนุนการยกเลิก
- การปรับปรุงเลเยอร์การนำเสนอ
ปัญหาที่ทราบ
- เอกสารประกอบ Java ของ Paging 3 ยังไม่พร้อมใช้งาน ในระหว่างนี้ โปรดใช้คำแนะนำที่ลิงก์ไว้ด้านบนหรือเอกสาร Kotlin (b/158614050)
เวอร์ชัน 2.1.2
เวอร์ชัน 2.1.2
18 มีนาคม 2020
androidx.paging:paging:2.1.2 เปิดตัวแล้ว เวอร์ชัน 2.1.2 มีคอมมิตเหล่านี้เทียบกับ 2.1.0
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาเกี่ยวกับ
IndexOutOfBoundsExceptionในกรณีที่เกิดขึ้นไม่บ่อยนักเมื่อแปลงตำแหน่งระหว่างการทำให้เป็นโมฆะ
ปัญหาเกี่ยวกับรุ่น
เราเผยแพร่เวอร์ชันการแบ่งหน้า
2.1.1อย่างไม่ถูกต้องจากสาขาที่กำหนดค่าไม่ถูกต้อง ซึ่งทำให้ API และฟังก์ชันที่ยังไม่ได้ใช้งานบางส่วนเปิดเผยต่อสาธารณะ ซึ่งจะพร้อมใช้งานในรุ่นต่อๆ ไปPaging
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 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- ตอนนี้การโหลดเริ่มต้นที่ต่อเนื่องจาก PositionalDataSource จะอยู่ตรงกลางการเข้าถึงล่าสุดเมื่อปิดใช้ตัวยึดตำแหน่ง
เวอร์ชัน 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
เพจจิ้ง 2.1.0-beta01 เปิดตัวโดยไม่มีการเปลี่ยนแปลงจาก 2.1.0-alpha01
เวอร์ชัน 2.1.0-alpha01
12 ตุลาคม 2018
การแบ่งหน้า 2.1.0-alpha01 มีการเพิ่มที่สำคัญ 2 รายการ ได้แก่ การวางหน้า และไลบรารีส่วนขยาย KTX สำหรับอาร์ติแฟกต์ทุกรายการ รวมถึงการเปลี่ยนแปลง API และการแก้ไขข้อบกพร่องอื่นๆ อีกหลายรายการ
การเปลี่ยนแปลง API
- เพิ่ม
PagedList.Config.Builder.setMaxSize()เพื่อจำกัดจำนวนรายการที่โหลดในหน่วยความจำ - เพิ่ม
androidx.paging.Config()เป็นทางเลือก Kotlin สำหรับPagedList.Config.Builder - เพิ่ม
androidx.paging.PagedList()เป็นทางเลือก Kotlin สำหรับPagedList.Builder - เพิ่ม
DataSourceFactory.toLiveData()เป็นทางเลือก Kotlin สำหรับLivePagedListBuilder - เพิ่ม
DataSourceFactory.toObservable()และtoFlowable()เป็นทางเลือก Kotlin สำหรับRxPagedListBuilder - เพิ่ม
AsyncPagedListDiffer.addPagedListListener()สำหรับใช้ฟังเมื่อมีการสลับ PagedList b/111698609 - เพิ่ม
PagedListAdapter.onCurrentListChanged()ตัวแปรที่ส่งผ่านรายการเก่าและใหม่ เลิกใช้งานตัวแปรเดิม - เพิ่มตัวแปร
PagedListAdapter/AsyncPagedListDiffer.submitList()ซึ่งใช้ Callback เพิ่มเติมที่ทริกเกอร์หาก/เมื่อ pagedlist แสดงขึ้น หลังจากเปรียบเทียบความแตกต่าง ซึ่งจะช่วยให้คุณซิงค์การสลับ PagedList กับการอัปเดต UI อื่นๆ ได้ b/73781068 PagedList.getLoadedCount()เพื่อให้คุณทราบว่ามีรายการอยู่ในความทรงจำกี่รายการ โปรดทราบว่าค่าที่ส่งคืนจะเท่ากับ.size()เสมอหากปิดใช้ตัวยึดตำแหน่ง
แก้ไขข้อบกพร่อง
- แก้ไขภาวะแข่งขันเมื่อทำการ Diff หากมีการนำรายการกลับมาใช้ใหม่ 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
ทรัพยากร Dependency ก่อน 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-beta1
5 เมษายน 2018
การแบ่งหน้าจะอยู่ในเวอร์ชันเบต้าเป็นระยะเวลาสั้นๆ ก่อนที่จะเปลี่ยนเป็นรุ่นที่อาจได้รับการเผยแพร่
เราไม่ได้วางแผนที่จะเปลี่ยนแปลง API เพิ่มเติมสำหรับ Paging 1.0 และเกณฑ์สำหรับการเปลี่ยนแปลง API ใดๆ นั้นสูงมาก
การรองรับ RxJava2 เวอร์ชันอัลฟ่าสำหรับเพจจิ้งจะเผยแพร่เป็นโมดูลเสริมแยกต่างหาก (android.arch.paging:rxjava2:1.0.0-alpha1)
และจะมีการกำหนดเวอร์ชันแยกต่างหากชั่วคราวจนกว่าจะเสถียร
ไลบรารีใหม่นี้มีทางเลือก RxJava2 สำหรับ LivePagedListBuilder ซึ่งสร้าง Observable และ Flowable ได้โดยใช้ Scheduler แทน Executor
Kotlin
val pagedItems = RxPagedListBuilder(myDataSource, /* page size */ 50) .setFetchScheduler(myNetworkScheduler) .buildObservable()
Java
Observable<PagedList<Item>> pagedItems = RxPagedListBuilder(myDataSource, /* page size */ 50) .setFetchScheduler(myNetworkScheduler) .buildObservable();
ฟีเจอร์ใหม่
RxPagedListBuilderจะเพิ่มผ่านอาร์ติแฟกต์android.arch.paging:rxjava2ใหม่
การเปลี่ยนแปลง API
การเปลี่ยนแปลง API เพื่อชี้แจงบทบาทของ Executor ใน Builder
เปลี่ยนชื่อ
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
เพจจิ้ง 1.0.0-alpha7 จะเปิดตัวพร้อมกับวงจร 1.1.1 เนื่องจาก Paging alpha7 ขึ้นอยู่กับการย้ายข้อมูลของคลาส Function ที่กล่าวถึงข้างต้น คุณจะต้องอัปเดตการขึ้นต่อกันของ lifecycle:runtime เป็น android.arch.lifecycle:runtime:1.1.1
Paging alpha7 มีกำหนดเป็นรุ่นสุดท้ายก่อนที่ Paging จะเข้าสู่เวอร์ชันเบต้า
การเปลี่ยนแปลง API
- ตอนนี้ออบเจ็กต์
DataSource.LoadParamsมีคอนสตรัคเตอร์สาธารณะ และออบเจ็กต์DataSource.LoadCallbackเป็นแบบนามธรรมแล้ว ซึ่งจะช่วยให้สามารถรวมDataSourceหรือทดสอบDataSourceโดยตรงด้วย Callback จำลองได้ 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เปลี่ยนจากอินเทอร์เฟซเป็นคลาส Abstract เพื่อเปิดใช้ฟังก์ชันการทำงานของแผนที่
การแก้ไขข้อบกพร่อง
- เปลี่ยน Builder เป็นแบบสุดท้าย 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