การแบ่งหน้า
ตารางนี้แสดงอาร์ติแฟกต์ทั้งหมดในกลุ่ม androidx.paging
อาร์ติแฟกต์ | รุ่นที่เสถียร | รุ่นที่อาจได้รับการเผยแพร่ | รุ่นเบต้า | รุ่นอัลฟ่า |
---|---|---|---|---|
paging-* | 3.3.6 | - | - | 3.4.0-alpha01 |
paging-compose | 3.3.6 | - | - | 3.4.0-alpha01 |
การประกาศทรัพยากร Dependency
หากต้องการเพิ่มทรัพยากร Dependency ใน Paging คุณต้องเพิ่มที่เก็บ Maven ของ Google ลงในโปรเจ็กต์ อ่านข้อมูลเพิ่มเติมได้ที่ที่เก็บ Maven ของ Google
เพิ่มการอ้างอิงสำหรับอาร์ติแฟกต์ที่คุณต้องการในไฟล์ build.gradle
สำหรับแอปหรือโมดูลของคุณ
Groovy
dependencies { def paging_version = "3.3.6" implementation "androidx.paging:paging-runtime:$paging_version" // alternatively - without Android dependencies for tests testImplementation "androidx.paging:paging-common:$paging_version" // optional - RxJava2 support implementation "androidx.paging:paging-rxjava2:$paging_version" // optional - RxJava3 support implementation "androidx.paging:paging-rxjava3:$paging_version" // optional - Guava ListenableFuture support implementation "androidx.paging:paging-guava:$paging_version" // optional - Jetpack Compose integration implementation "androidx.paging:paging-compose:3.4.0-alpha01" }
Kotlin
dependencies { val paging_version = "3.3.6" implementation("androidx.paging:paging-runtime:$paging_version") // alternatively - without Android dependencies for tests testImplementation("androidx.paging:paging-common:$paging_version") // optional - RxJava2 support implementation("androidx.paging:paging-rxjava2:$paging_version") // optional - RxJava3 support implementation("androidx.paging:paging-rxjava3:$paging_version") // optional - Guava ListenableFuture support implementation("androidx.paging:paging-guava:$paging_version") // optional - Jetpack Compose integration implementation("androidx.paging:paging-compose:3.4.0-alpha01") }
ดูข้อมูลเกี่ยวกับการใช้ส่วนขยาย Kotlin ได้ที่เอกสารประกอบของ KTX
ดูข้อมูลเพิ่มเติมเกี่ยวกับการพึ่งพาได้ที่เพิ่มการพึ่งพาบิลด์
ความคิดเห็น
ความคิดเห็นของคุณจะช่วยให้ Jetpack ทำงานได้ดียิ่งขึ้น โปรดแจ้งให้เราทราบหากพบปัญหาใหม่หรือมี ไอเดียในการปรับปรุงไลบรารีนี้ โปรดดูปัญหาที่มีอยู่ ในไลบรารีนี้ก่อนสร้างปัญหาใหม่ คุณสามารถโหวตปัญหาที่มีอยู่ได้โดย คลิกปุ่มดาว
ดูข้อมูลเพิ่มเติมได้ในเอกสารประกอบของเครื่องมือติดตามปัญหา
เวอร์ชัน 3.4
เวอร์ชัน 3.4.0-alpha01
2 กรกฎาคม 2025
androidx.paging:paging-*:3.4.0-alpha01
ได้รับการเผยแพร่แล้ว เวอร์ชัน 3.4.0-alpha01 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- Paging ได้เพิ่มเป้าหมาย KMP ต่อไปนี้ watchos, tvos, mingwX64, watchosDeviceArm64 และ linuxArm64 (I237dd, Ia62b3, b/368046982, Icf15d, b/364652024, I139d3, b/338268719)
การแก้ไขข้อบกพร่อง
- การทดสอบหน่วย Android ที่ดึงข้อมูลใน Paging 3.3 ขึ้นไปจะไม่เกิดข้อผิดพลาดจาก
PagingLogger
(Ia9400, b/331684448) อีกต่อไป - แก้ไขข้อบกพร่องที่
RecyclerView
แสดงIndexOutOfBoundsException
เมื่อผู้ใช้เลื่อนขณะอัปเดตRecyclerView
(Id1f16, b/381024738) - แก้ไขข้อบกพร่องที่การแบ่งหน้าไม่สามารถทริกเกอร์การโหลดเพิ่มเติมเมื่อรีเฟรชขณะเลื่อน (I60ca5, b/352586078)
- แก้ไขปัญหาการขัดข้องเมื่อเลื่อนขณะรีเฟรชรายการการแบ่งหน้า (I8c65a, b/347649763)
เวอร์ชัน 3.3
เวอร์ชัน 3.3.6
12 กุมภาพันธ์ 2025
androidx.paging:paging-*:3.3.6
ได้รับการเผยแพร่แล้ว เวอร์ชัน 3.3.6 มีการเปลี่ยนแปลงเหล่านี้
การแก้ไขข้อบกพร่อง
- ตอนนี้ระบบจะจัดเก็บสัญญาณรีเฟรชและลองอีกครั้งที่ส่งระหว่างการรีเฟรชครั้งแรก และจะส่งอีกครั้งโดยอัตโนมัติเมื่อ Paging presenter พร้อม
การมีส่วนร่วมภายนอก
เวอร์ชัน 3.3.5
11 ธันวาคม 2024
androidx.paging:paging-*:3.3.5
ได้รับการเผยแพร่แล้ว เวอร์ชัน 3.3.5 มีการเปลี่ยนแปลงเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขข้อบกพร่องที่
RecyclerView
แสดงIndexOutOfBoundsException
เมื่อผู้ใช้เลื่อนขณะอัปเดตRecyclerView
(Id1f16, b/381024738)
เวอร์ชัน 3.3.4
13 พฤศจิกายน 2024
androidx.paging:paging-*:3.3.4
ได้รับการเผยแพร่แล้ว เวอร์ชัน 3.3.4 มีการเปลี่ยนแปลงเหล่านี้
การแก้ไขข้อบกพร่อง
- การทดสอบหน่วย Android ที่ดึงข้อมูลใน Paging 3.3 ขึ้นไปจะไม่แสดงข้อผิดพลาด เช่น
Method isLoggable in android.util.Log not mocked
อีกต่อไป (Ia9400, b/331684448)
เวอร์ชัน 3.3.2
7 สิงหาคม 2024
androidx.paging:paging-*:3.3.2
ได้รับการเผยแพร่แล้ว เวอร์ชัน 3.3.2 มีการเปลี่ยนแปลงเหล่านี้
ฟีเจอร์ใหม่
paging-common
และpaging-testing
ได้เพิ่มเป้าหมายใหม่แบบหลายแพลตฟอร์มของ Kotlin ได้แก่watchos
,tvos
และlinuxArm64
(90c9768), (53e0eca)
เวอร์ชัน 3.3.1
24 กรกฎาคม 2024
androidx.paging:paging-*:3.3.1
ได้รับการเผยแพร่แล้ว เวอร์ชัน 3.3.1 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่
AsyncPagingDataDiffer
หรือ API ที่สร้างขึ้นบนAsyncPagingDataDiffer
เช่นPagingDataAdapter
ที่ใช้กับRecyclerView
จะไม่สามารถทริกเกอร์การโหลดเพิ่มเติมเมื่อแหล่งข้อมูลสำรองรีเฟรชขณะเลื่อน (I60ca5, b/352586078) - แก้ไขข้อขัดข้องที่เกิดขึ้นเมื่อนำรายการออกจากแหล่งข้อมูลสำรองขณะเลื่อน
RecyclerView
โดยใช้PagingDataAdapter
หรือAsyncPagingDataDiffer
(I8c65a, b/347649763)
เวอร์ชัน 3.3.0
14 พฤษภาคม 2024
androidx.paging:paging-*:3.3.0
ได้รับการเผยแพร่แล้ว เวอร์ชัน 3.3.0 มีการเปลี่ยนแปลงเหล่านี้
การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 3.2.0
- ตอนนี้
PagingDataPresenter
เป็นชั้นเรียนสาธารณะแล้ว ตอนนี้คุณสร้างพรีเซนเตอร์แบบหลายแพลตฟอร์มบนPagingDataPresenter
ได้แล้ว โดยไม่ต้องใช้ Paging API ภายในหรือpaging-runtime
ของAsyncPagingDataDiffer
- เพิ่มเมธอดตัวช่วย
LoadStates
และCombinedLoadStates
ใหม่ในhasError
และisIdle
เพื่อตรวจสอบว่าLoadStates
อยู่ในสถานะข้อผิดพลาดหรือสถานะNotLoading
ตามลำดับ นอกจากนี้ ยังได้เพิ่มawaitNotLoading()
เมธอดส่วนขยาย Kotlin ใหม่ในFlow<CombinedLoadStates>
ซึ่งจะรอจนกว่าการโหลดจะเข้าสู่สถานะNotLoading
หรือสถานะข้อผิดพลาด PagingData.empty()
จะส่งสถานะNotLoading
โดยค่าเริ่มต้น เว้นแต่จะมีการส่งLoadStates
ที่กำหนดเองไปยังเครื่องมือสร้าง ซึ่งแตกต่างจากลักษณะการทำงานที่มีอยู่ซึ่งจะไม่ส่งLoadStates
เมื่อส่งไปยังPagingDataAdapter
หรือจะส่งสถานะการโหลดเมื่อรวบรวมเป็นLazyPagingItems
เมื่อรวบรวมเป็นLazyPagingItems
ตอนนี้ระบบจะแสดงรายการที่ว่างเปล่าทันทีเมื่อมีการเขียนครั้งแรก
ความเข้ากันได้ของ Kotlin Multiplatform
ตอนนี้ Paging ได้จัดส่งอาร์ติแฟกต์ที่ใช้ได้กับ Kotlin Multiplatform แล้ว ซึ่งส่วนใหญ่เป็นผลงานที่อัปสตรีมจากโปรเจ็กต์ multiplatform-paging ของ CashApp
paging-common
ได้ย้าย Paging 3 API ทั้งหมดไปที่common
และตอนนี้เข้ากันได้กับ jvm และ iOS นอกเหนือจาก Androidpaging-testing
ได้ย้ายโค้ดไปยังcommon
และตอนนี้ใช้งานร่วมกับ jvm และ iOS ได้แล้ว นอกเหนือจาก Androidpaging-compose
ได้ย้ายโค้ดไปยังcommon
และจัดส่งอาร์ติแฟกต์ Android ซึ่งตรงกับการรองรับหลายแพลตฟอร์มของandroidx.compose
paging-runtime
,paging-guava
,paging-rxjava2
และpaging-rxjava3
จะยังคงใช้ได้ใน Android เท่านั้น
เวอร์ชัน 3.3.0-rc01
1 พฤษภาคม 2024
androidx.paging:paging-*:3.3.0-rc01
จะเปิดตัวโดยไม่มีการเปลี่ยนแปลงใน Paging 3.3.0-beta01 เวอร์ชัน 3.3.0-rc01 มีการคอมมิตเหล่านี้
เวอร์ชัน 3.3.0-beta01
3 เมษายน 2024
androidx.paging:paging-*:3.3.0-beta01
เปิดตัวโดยไม่มีการเปลี่ยนแปลงที่สำคัญ เวอร์ชัน 3.3.0-beta01 มีการเปลี่ยนแปลงเหล่านี้
เวอร์ชัน 3.3.0-alpha05
20 มีนาคม 2024
androidx.paging:paging-*:3.3.0-alpha05
ได้รับการเผยแพร่แล้ว เวอร์ชัน 3.3.0-alpha05 มีการเปลี่ยนแปลงเหล่านี้
การเปลี่ยนแปลง API
- ตอนนี้การแบ่งหน้าใช้คำอธิบายประกอบ
@MainThread
AndroidX Annotation สำหรับโค้ดทั่วไปแล้ว (I78f0d, b/327682438)
เวอร์ชัน 3.3.0-alpha04
6 มีนาคม 2024
androidx.paging:paging-*:3.3.0-alpha04
ได้รับการเผยแพร่แล้ว เวอร์ชัน 3.3.0-alpha04 มีการเปลี่ยนแปลงเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขข้อผิดพลาดเล็กน้อยในเอกสารประกอบที่เกี่ยวข้องกับการเพิ่มความเข้ากันได้กับ Kotlin 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 แห่งและทำให้ที่เก็บทั้ง 2 เข้ากันได้
paging-common
ได้ย้าย Paging 3 API ทั้งหมดไปที่common
และตอนนี้เข้ากันได้กับ jvm และ iOS นอกเหนือจาก Androidpaging-testing
ได้ย้ายโค้ดไปยังcommon
และตอนนี้ใช้งานร่วมกับ jvm และ iOS ได้แล้ว นอกเหนือจาก Androidpaging-compose
ได้ย้ายโค้ดไปยังcommon
และจัดส่งอาร์ติแฟกต์ Android ซึ่งตรงกับการรองรับหลายแพลตฟอร์มของandroidx.compose
paging-runtime
,paging-guava
,paging-rxjava2
และpaging-rxjava3
จะยังคงใช้ได้ใน Android เท่านั้น
การเปลี่ยนแปลง API
- อินเทอร์เฟซ Logger สาธารณะที่มีไว้สำหรับการใช้งานภายในเท่านั้นถูกเลิกใช้งานแล้ว (I16e95, b/288623117)
การมีส่วนร่วมภายนอก
- ขอขอบคุณ veyndan จาก Cash App ที่ช่วยย้าย Paging ไปยัง Kotlin Multiplatform (#560, #561, #562, #573, #576, #577, #578, #579, #580, #581, #583, #584, #586, #609)
เวอร์ชัน 3.3.0-alpha01
20 กันยายน 2023
- นี่คือการเปิดตัวไลบรารี androidx.paging เป็นครั้งแรกในหลายแพลตฟอร์ม เวอร์ชันนี้มีเฉพาะอาร์ติแฟกต์
*-jvm
และ*-android
สำหรับตัวแปร macOS, iOS และ Linux ให้ใช้3.3.0-alpha02
เวอร์ชัน 3.2
เวอร์ชัน 3.2.1
6 กันยายน 2023
androidx.paging:paging-*:3.2.1
ได้รับการเผยแพร่แล้ว เวอร์ชัน 3.2.1 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่
asSnapshot()
API ของอาร์ติแฟกต์การทดสอบการแบ่งหน้าจะค้างเมื่อส่ง Flow ที่สร้างโดยใช้PagingData.from(List)
เนื่องจากasSnapshot()
จะไม่มีข้อมูลเกี่ยวกับเวลาที่การโหลดเสร็จสิ้น (ต่างจากPagingData.from(List, LoadStates)
ที่โอเวอร์โหลด) วิธีแก้ปัญหานี้ใช้ได้กับโฟลว์ที่ทำเสร็จได้เท่านั้น (เช่นflowOf(PagingData.from(...))
) สำหรับโฟลว์ที่ทำเสร็จไม่ได้ (เช่นMutableStateFlow
ให้ใช้โอเวอร์โหลดPagingData.from
ที่ให้LoadStates
) (I502c3) - ตอนนี้ Paging Compose ใช้
AndroidUiDispatcher.Main
ภายในเพื่อให้แน่ใจว่าข้อมูลใหม่จะพร้อมใช้งานในเฟรมเดียวกันเมื่อโหลดเสร็จ (Ia55af)
เวอร์ชัน 3.2.0
26 กรกฎาคม 2023
androidx.paging:paging-*:3.2.0
ได้รับการเผยแพร่แล้ว เวอร์ชัน 3.2.0 มีคอมมิตเหล่านี้
การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 3.1.0
- Paging Compose มีความเสถียรของ API และได้ผสานรวมกลับเข้าไปในส่วนที่เหลือของ Paging แล้ว ซึ่งตอนนี้เวอร์ชันของ Paging Compose จะตรงกับอาร์ติแฟกต์อื่นๆ ทั้งหมดของ Paging การเปลี่ยนแปลงตั้งแต่เวอร์ชัน 3.1.0 มีดังนี้
- รองรับการแสดงตัวอย่างรายการข้อมูลปลอมโดยการสร้าง
PagingData.from(fakeData)
และห่อPagingData
นั้นในMutableStateFlow
(เช่นMutableStateFlow(PagingData.from(listOf(1, 2, 3)))
) ส่งโฟลว์นี้ไปยัง Composable ของ@Preview
เป็นตัวรับสำหรับcollectAsLazyPagingItems()
เพื่อแสดงตัวอย่าง - รองรับเลย์เอาต์แบบเลื่อนทั้งหมด เช่น
LazyVerticalGrid
และHorizontalPager
รวมถึงคอมโพเนนต์แบบเลื่อนที่กำหนดเองจากไลบรารี Wear และ TV ซึ่งทำได้ผ่านเมธอดส่วนขยายLazyPagingItems
ระดับล่างใหม่itemKey
และitemContentType
ซึ่งช่วยให้คุณใช้พารามิเตอร์key
และcontentType
กับ API มาตรฐานitems
ที่มีอยู่แล้วสำหรับLazyColumn
,LazyVerticalGrid
รวมถึง API ที่เทียบเท่า เช่นHorizontalPager
items(lazyPagingItems)
และitemsIndexed(lazyPagingItems)
ซึ่งรองรับเฉพาะLazyListScope
ถูกเลิกใช้งานแล้ว
- รองรับการแสดงตัวอย่างรายการข้อมูลปลอมโดยการสร้าง
- อาร์ติแฟกต์
paging-testing
ใหม่ซึ่งมี API ที่ออกแบบมาเพื่อการทดสอบหน่วยของแต่ละเลเยอร์ในแอปและการผสานรวมกับ Paging โดยแยกกัน เช่นTestPager
คลาสที่ช่วยให้คุณตรวจสอบลักษณะการทำงานของการติดตั้งใช้งานPagingSource
ที่กำหนดเองได้โดยไม่ขึ้นอยู่กับ Pager และ UI จริง-
asPagingSourceFactory
API เพื่อแปลงFlow<List<Value>>
หรือList<Value>
แบบคงที่ให้เป็นPagingSourceFactory
ที่ส่งไปยัง Pager ในการทดสอบได้ asSnapshot
ส่วนขยาย Kotlin ในFlow<PagingData<Value>>
ซึ่งจะแปลFlow<PagingData<Value>>
เป็นList<Value>
โดยตรงasSnapshot lambda
ช่วยให้คุณเลียนแบบ UI ของแอปผ่าน API เช่นscrollTo
หรือappendScrollWhile
เพื่อให้คุณยืนยันได้ว่าสแนปชอตของข้อมูลถูกต้อง ณ จุดใดก็ตามในชุดข้อมูลแบบแบ่งหน้า
- เพิ่มบันทึกเริ่มต้นเพื่อแสดงข้อมูลการแก้ไขข้อบกพร่องของการแบ่งหน้าใน 2 ระดับ ได้แก่
VERBOSE
และDEBUG
คุณเปิดใช้บันทึกได้ผ่านคำสั่งadb shell setprop log.tag.Paging [DEBUG|VERBOSE]
ซึ่งใช้ได้กับทั้งการแบ่งหน้าด้วย 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 ที่ชัดเจนกว่า() -> PagingSource
Lambda ที่มีอยู่ คุณสามารถใช้ Factory นี้เพื่อสร้างอินสแตนซ์ของPager
(I33165, b/280655188) - เพิ่ม
paging-testing
API ใหม่ของList<Value>.asPagingSourceFactory()
เพื่อรับPagingSourceFactory
ที่โหลดจากรายการข้อมูลที่ไม่เปลี่ยนแปลงเท่านั้น คุณยังคงควรใช้ส่วนขยายที่มีอยู่บนFlow<List<Value>>
เพื่อทดสอบกับข้อมูลแบบคงที่หลายรุ่น (Id34d1, b/280655188)
การเปลี่ยนแปลง API
- ตอนนี้เราได้ใส่คำอธิบายประกอบ
@VisibleForTesting
ใน API สาธารณะทั้งหมดในการทดสอบการแบ่งหน้าเพื่อให้มั่นใจว่า API เหล่านี้จะใช้ในการทดสอบเท่านั้น (I7db6e) asSnapshot
API ไม่จำเป็นต้องส่งCoroutineScope
อีกต่อไป ตอนนี้ค่าเริ่มต้นคือการใช้บริบทที่รับช่วงมาจากขอบเขตระดับบน (Id0a78, b/282240990)- จัดเรียงพารามิเตอร์ของตัวสร้าง
TestPager
ใหม่ให้ตรงกับลำดับของพารามิเตอร์ของตัวสร้างPager
จริงอย่างเป็นธรรมชาติ (I6185a) - การใช้ประเภท Lambda ของการทดสอบการแบ่งหน้าที่ย้ายข้อมูลแล้วจาก
() -> PagingSource<Key, Value>
เป็นPagingSourceFactory<Key, Value>
(I4a950, b/280655188)
การเปลี่ยนแปลงลักษณะการทำงาน
- ไม่จำเป็นต้องใช้โปรแกรมจัดสรรหลักเพื่อเรียกใช้
asSnapshot
การทดสอบการเรียกหน้าอีกต่อไป การตั้งค่านี้จะไม่เปลี่ยนแปลงลักษณะการทำงานของการทดสอบอีกต่อไป (Ie56ea)
เวอร์ชัน 3.2.0-alpha05
3 พฤษภาคม 2023
androidx.paging:paging-*:3.2.0-alpha05
ได้รับการเผยแพร่แล้ว เวอร์ชัน 3.2.0-alpha05 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- ตอนนี้ Paging Testing API ของ
asSnapshot
จะตั้งค่าเริ่มต้นของพารามิเตอร์loadOperations
เป็น Lambda ว่าง ซึ่งช่วยให้เรียกใช้asSnapshot
ได้โดยไม่ต้องส่งการดำเนินการโหลดใดๆ เพื่อดึงข้อมูลจากการโหลดการรีเฟรชครั้งแรก (Ied354, b/277233770)
การปรับปรุงเอกสารประกอบ
- อัปเดตเอกสารประกอบเกี่ยวกับ
asPagingSourceFactory()
เพื่อชี้แจงว่าเป็นวิธีการขยายในFlow
ซึ่งจะแสดงผลโรงงานที่นำกลับมาใช้ใหม่ได้สำหรับการสร้างอินสแตนซ์PagingSource
(I5ff4f, I705b5) - อัปเดตเอกสารประกอบเกี่ยวกับ
LoadResult.Page
ตัวสร้างเพื่อชี้แจงความจำเป็นในการลบล้างitemsBefore
และitemsAfter
เพื่อรองรับการข้าม (Ied354)
การมีส่วนร่วมภายนอก
- ขอขอบคุณ Veyndan ที่ช่วยให้ Paging ไม่ต้องพึ่งพา Android/JVM อีกต่อไป (#525, #523, #520, #519, #507, #506, #505, #499, #497, #496, #493)
เวอร์ชัน 3.2.0-alpha04
8 กุมภาพันธ์ 2023
androidx.paging:paging-*:3.2.0-alpha04
ได้รับการเผยแพร่แล้ว เวอร์ชัน 3.2.0-alpha04 มีคอมมิตเหล่านี้
การทดสอบการเรียก
- ตอนนี้อาร์ติแฟกต์
paging-testing
มีเมธอดasPagingSourceFactory
สำหรับสร้างpagingSourceFactory
จากFlow<List<Value>>
เพื่อส่งไปยัง Pager แล้วList<Value>>
แต่ละรายการที่ปล่อยออกมาจาก 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>
โดยตรงasSnapshot
Lambda ช่วยให้คุณจำลอง UI ของแอปผ่าน API เช่นscrollTo
หรือappendScrollWhile
ในลักษณะที่ทำซ้ำได้และสอดคล้องกัน เพื่อให้คุณยืนยันได้ว่าสแนปชอตของข้อมูลถูกต้อง ณ จุดใดก็ตามในชุดข้อมูลที่แบ่งหน้า// Create your ViewModel instance val viewModel = … // Get the Flow of PagingData from the ViewModel val data< Flow<PagingData<String>> = viewModel.data val snapshot: List<String> = data.asSnapshot { // Each operation inside the lambda waits for the data to settle before continuing scrollTo(index = 50) // While you can’t view the items within the asSnapshot call, // you can continuously scroll in a direction while some condition is true // i.e., in this case until you hit a placeholder item appendScrollWhile { item: String -> item != “Header 1” } } // With the asSnapshot complete, you can now verify that the snapshot // has the expected values
asSnapshot
เป็นวิธีการsuspend
ที่คาดว่าจะดำเนินการภายในrunTest
ดูข้อมูลเพิ่มเติมได้ที่การทดสอบโครูทีน Kotlin ใน Android (I55fd2, I5bd26, I7ce34, I51f4d, I2249f, Id6223, Ic4bab, Ib29b9, Ic1238, I96def, b/235528239)
การเปลี่ยนแปลง API
- ตอนนี้การเรียก UI ไปยัง
getItem
และpeek
ในAsyncPagingDataDiffer
และPagingDataAdapter
จะมีเครื่องหมายระบุอย่างถูกต้องว่าเรียกได้เฉพาะในเทรดหลักเท่านั้น (I699b6) - นำไวลด์การ์ดออกจากประเภททั่วไปที่ใช้โดย
TestPager
เพื่อให้ใช้ผลลัพธ์ของเมธอดเหล่านั้นในโค้ดที่เขียนด้วยภาษาการเขียนโปรแกรม Java ได้ง่ายขึ้น (I56c42)
เวอร์ชัน 3.2.0-alpha03
24 ตุลาคม 2022
androidx.paging:paging-*:3.2.0-alpha03
ได้รับการเผยแพร่แล้ว เวอร์ชัน 3.2.0-alpha03 มีคอมมิตต่อไปนี้
การทดสอบการเรียก
รุ่นนี้มีอาร์ติแฟกต์ใหม่คือ paging-testing
อาร์ติแฟกต์นี้มี API ที่ออกแบบมาเพื่อการทดสอบหน่วยของแต่ละเลเยอร์ในแอปและการผสานรวมกับ Paging โดยแยกกัน
เช่น รุ่นแรกนี้มีTestPager
คลาสPagingSource
ที่ช่วยให้คุณตรวจสอบลักษณะการทำงานของการติดตั้งใช้งาน Pager
ที่กำหนดเองได้โดยอิสระจาก PagingSource
และ 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 shell
adb shell setprop log.tag.Paging [DEBUG|VERBOSE].
(b/235527159)
การแก้ไขข้อบกพร่อง
- แก้ไขข้อผิดพลาดเกี่ยวกับตัวสร้าง
PagingDataDiffer
ที่ขาดหายไปเมื่อใช้paging-common:3.2.0-alpha01
กับรันไทม์paging-runtime:3.1.1
หรือเก่ากว่า (b/235256201)
เวอร์ชัน 3.2.0-alpha01
1 มิถุนายน 2022
androidx.paging:paging-*:3.2.0-alpha01
ได้รับการเผยแพร่แล้ว เวอร์ชัน 3.2.0-alpha01 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- เพิ่มตัวสร้างสำหรับ
PagingDataAdapter
และAsyncPagingDataDiffer
ซึ่งยอมรับCoroutineContext
แทนCoroutineDispatcher
(Idc878) - โดยค่าเริ่มต้น
PagingData.from()
และPagingData.empty()
จะไม่มีผลกับCombinedLoadStates
ในฝั่งผู้นำเสนออีกต่อไป ระบบได้เพิ่มการโอเวอร์โหลดใหม่ที่อนุญาตให้ส่งsourceLoadStates
และremoteLoadStates
ไปยังตัวสร้างเหล่านี้เพื่อรักษาลักษณะการทำงานที่มีอยู่ในการตั้งค่าLoadStates
ให้เป็นเทอร์มินัลอย่างสมบูรณ์ (เช่นNotLoading(endOfPaginationReached = false)
) โดยมีตัวเลือกในการรวมสถานะระยะไกลด้วยหากจำเป็น หากไม่ได้ส่งLoadStates
ระบบจะคงCombinedLoadStates
ก่อนหน้าไว้ที่ฝั่งผู้นำเสนอเมื่อได้รับPagingData
แบบคงที่ (Ic3ce5, b/205344028)
การแก้ไขข้อบกพร่อง
- ตอนนี้ระบบจะจัดลำดับความสำคัญของผลลัพธ์ของ
PagingSource.getRefreshKey()
เหนือinitialKey
อย่างถูกต้องในกรณีที่แสดงผลเป็น Null แต่มีการตั้งค่าinitialKey
ที่ไม่ใช่ Null (Ic9542, b/230391606)
การมีส่วนร่วมภายนอก
- อัปเดต :compose:ui:ui-test API (updateApi) เนื่องจากการย้ายข้อมูล test-coroutines-lib (I3366d)
เวอร์ชัน 3.1
เวอร์ชัน 3.1.1
9 มีนาคม 2022
androidx.paging:paging-*:3.1.1
ได้รับการเผยแพร่แล้ว เวอร์ชัน 3.1.1 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- นำเหตุการณ์
LoadState.NotLoading
ระดับกลางระหว่างรุ่นที่.cachedIn()
แทรกอย่างไม่ถูกต้องออก การเปลี่ยนแปลงนี้ช่วยให้ตอบสนองต่อLoadState
การเปลี่ยนแปลงได้ง่ายขึ้นมากด้วยการนำเหตุการณ์LoadState.NotLoading
ที่ซ้ำซ้อนออก ซึ่งเหตุการณ์เหล่านี้เกิดขึ้นระหว่างการลองโหลดที่ล้มเหลวซ้ำ เมื่อรีเฟรช หรือระหว่างการล้างข้อมูล
เวอร์ชัน 3.1.0
17 พฤศจิกายน 2021
androidx.paging:paging-*:3.1.0
ได้รับการเผยแพร่แล้ว เวอร์ชัน 3.1.0 มีคอมมิตเหล่านี้
การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 3.0.0
Flow<PagingData>.observable
และFlow<PagingData>.flowable
API ไม่ใช่เวอร์ชันทดลองอีกต่อไป- การเปลี่ยนแปลงลักษณะการทำงานของ
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
ซึ่งทำให้ Paging ทิ้งคำขอโหลดที่รอดำเนินการหรือในอนาคตไปยังPagingSource
นี้และทำให้คำขอดังกล่าวไม่ถูกต้อง ประเภทการคืนค่านี้ออกแบบมาเพื่อจัดการข้อมูลที่อาจไม่ถูกต้องหรือล้าสมัยซึ่งอาจส่งคืนจากฐานข้อมูลหรือเครือข่าย- เพิ่ม API ของผู้นำเสนอ
.onPagesPresented
และ.addOnPagesUpdatedListener
ซึ่งทริกเกอร์พร้อมกันเมื่อมีการนำเสนอหน้าต่างๆ ใน UI การอัปเดตหน้าเว็บอาจเกิดขึ้นในสถานการณ์ต่อไปนี้- การโหลด PagingData รุ่นใหม่ครั้งแรกเสร็จสมบูรณ์ ไม่ว่ารุ่นใหม่จะมีรายการที่แสดงที่มีการเปลี่ยนแปลงหรือไม่ก็ตาม เช่น รุ่นใหม่ที่โหลดครั้งแรกโดยไม่มีการอัปเดตเนื่องจากรายการเหมือนกันทุกประการจะยังคงทริกเกอร์การเรียกกลับนี้
- ระบบจะแทรกหน้า แม้ว่าหน้าที่จะแทรกจะไม่มีรายการใหม่ก็ตาม
- ระบบจะทิ้งหน้าเว็บ แม้ว่าหน้าเว็บที่ทิ้งจะว่างเปล่าก็ตาม
เวอร์ชัน 3.1.0-rc01
3 พฤศจิกายน 2021
androidx.paging:paging-*:3.1.0-rc01
ได้รับการเผยแพร่แล้ว เวอร์ชัน 3.1.0-rc01 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไข Race Condition + Memory Leak ใน .cachedIn() ในกรณีที่ Paging ส่งเหตุการณ์การโหลดหลายรายการไปยังดาวน์สตรีมในขณะที่ไม่มี Observer หรือระหว่างที่ Observer สลับไปใช้ PagingData ใหม่ (Ib682e)
เวอร์ชัน 3.1.0-beta01
13 ตุลาคม 2021
androidx.paging:paging-*:3.1.0-beta01
ได้รับการเผยแพร่แล้ว เวอร์ชัน 3.1.0-beta01 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่การเข้าถึงรายการอย่างรวดเร็วหลายครั้งอาจทำให้ระบบไม่พิจารณารายการเหล่านั้นใน prefetchDistance ซึ่งทำให้การโหลดหน้าเว็บหยุดชะงัก ปัญหานี้จะเกิดขึ้นโดยเฉพาะเมื่อมีการวางไอเทมจำนวนมากพร้อมกันในลำดับที่ให้ความสำคัญกับการโหลดตามทิศทางการเลื่อนของผู้ใช้ ตอนนี้การเข้าถึงรายการเหล่านี้จะได้รับการบัฟเฟอร์และจัดลำดับความสำคัญแบบซิงโครนัสเพื่อป้องกันไม่ให้รายการหลุด (aosp/1833273)
เวอร์ชัน 3.1.0-alpha04
29 กันยายน 2021
androidx.paging:paging-*:3.1.0-alpha04
ได้รับการเผยแพร่แล้ว เวอร์ชัน 3.1.0-alpha04 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- API ของ
Flow<PagingData>.observable
และFlow<PagingData>.flowable
ไม่ใช่เวอร์ชันทดลองอีกต่อไป (Ie0bdd)
การแก้ไขข้อบกพร่อง
- สำหรับ LoadStates ตอนนี้
endOfPaginationReached
จะเป็นfalse
สำหรับLoadType.REFRESH
เสมอ ก่อนหน้านี้true
endOfPaginationReachedREFRESH
อาจเป็นจริงสำหรับ 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
ใน Presenter API จะไม่ส่งCombinedLoadStates
เริ่มต้นที่ตั้งค่าสถานะตัวกลางเป็นnull
และตั้งค่าสถานะแหล่งที่มาเป็นNotLoading(endOfPaginationReached = false)
ซ้ำอีกต่อไป ซึ่งหมายความว่า- ระบบจะป้อนข้อมูลสถานะตัวกลางเสมอหากคุณใช้ RemoteMediator
- การลงทะเบียนเครื่องมือฟัง loadState ใหม่หรือตัวรวบรวมใหม่ใน
.loadStateFlow
จะไม่ปล่อยค่าปัจจุบันในทันทีอีกต่อไป หากยังไม่ได้รับCombinedLoadStates
จริงจากPagingData
ซึ่งอาจเกิดขึ้นหาก Collector หรือ Listener เริ่มทำงาน ก่อนที่จะส่งPagingData
(I1a748)
เวอร์ชัน 3.1.0-alpha03
21 กรกฎาคม 2021
androidx.paging:paging-*:3.1.0-alpha03
ได้รับการเผยแพร่แล้ว เวอร์ชัน 3.1.0-alpha03 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
เพิ่มประเภทการคืนค่า LoadResult ของ LoadResult.Invalid ลงใน PagingSource เมื่อ PagingSource.load แสดงผล LoadResult.Invalid การแบ่งหน้าจะทิ้งข้อมูลที่โหลดแล้วและ ทำให้ PagingSource ไม่ถูกต้อง ประเภทการคืนค่านี้ออกแบบมาเพื่อ จัดการข้อมูลที่อาจไม่ถูกต้องหรือล้าสมัยซึ่งอาจส่งคืน จากฐานข้อมูลหรือเครือข่าย
ตัวอย่างเช่น หากมีการเขียนลงในฐานข้อมูลพื้นฐาน แต่ PagingSource ไม่ทำให้เป็นโมฆะได้ทันเวลา อาจทำให้ได้ผลลัพธ์ที่ไม่สอดคล้องกันหากการใช้งานขึ้นอยู่กับ ความคงที่ของชุดข้อมูลสำรองที่โหลดจาก (เช่น LIMIT OFFSET style db implementations). ในสถานการณ์นี้ เราขอแนะนำให้ตรวจสอบการลบล้างหลังจากโหลดและส่งคืน 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 ที่ไม่ถูกต้องอยู่แล้ว การเปลี่ยนแปลงนี้จะแก้ไข Race Condition ซึ่งทำให้การแบ่งหน้าทิ้งสัญญาณการลบล้าง และค้างเมื่อระบุแหล่งที่มาซึ่งไม่ถูกต้องอยู่แล้วในระหว่างการโหลดครั้งแรก นอกจากนี้ ตอนนี้ระบบจะนำ การเรียกกลับ invalidate ออกอย่างถูกต้องหลังจากที่ทริกเกอร์แล้ว เนื่องจากรับประกันได้ว่าจะมีการเรียกใช้เพียงครั้งเดียวเท่านั้น (I27e69)
- การส่งค่าเริ่มต้นของตัวยึดตำแหน่ง (InitialPagedList) จากสตรีม PagedList ที่สร้างอินสแตนซ์ใหม่ เช่น LivePagedListBuilder หรือ RxPagedListBuilder จะไม่ล้างข้อมูลที่โหลดไว้ก่อนหน้านี้อีกต่อไป
เวอร์ชัน 3.1.0-alpha02
1 กรกฎาคม 2021
androidx.paging:paging-*:3.1.0-alpha02
ได้รับการเผยแพร่แล้ว เวอร์ชัน 3.1.0-alpha02 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
เพิ่มเครื่องมือฟังเหตุการณ์ onPagesPresented และ API ของ 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 มีคอมมิตเหล่านี้
รองรับเลย์เอาต์แบบเลื่อนทั้งหมด
ก่อนหน้านี้ Paging Compose มีส่วนขยาย items
และ itemsIndexed
ที่กำหนดเองใน LazyListScope
ซึ่งหมายความว่าคุณไม่สามารถใช้ Paging Compose กับเลย์เอาต์แบบ Lazy อื่นๆ เช่น LazyVerticalGrid
, HorizontalPager
หรือคอมโพเนนต์แบบ Lazy ที่กำหนดเองอื่นๆ ที่ไลบรารี Wear และ TV มีให้ การแก้ไขความไม่ยืดหยุ่นนี้เป็นการอัปเดตหลักสำหรับการเปิดตัวนี้
เราจำเป็นต้องสร้าง API ในเลเยอร์อื่นเพื่อรองรับเลย์เอาต์แบบเลื่อนขี้เกียจเพิ่มเติม แทนที่จะให้ items
API ที่กำหนดเองสำหรับเลย์เอาต์แบบเลื่อนขี้เกียจแต่ละรายการ ตอนนี้ Paging Compose มีเมธอดส่วนขยายระดับต่ำกว่าเล็กน้อยใน LazyPagingItems
ใน itemKey
และ itemContentType
API เหล่านี้มุ่งเน้นการช่วยคุณใช้พารามิเตอร์ key
และ contentType
กับ API มาตรฐาน items
ที่มีอยู่แล้วสําหรับ LazyColumn
, LazyVerticalGrid
รวมถึงพารามิเตอร์ที่เทียบเท่าใน API เช่น HorizontalPager
(Ifa13b, Ib04f0, b/259385813)
ซึ่งหมายความว่าการรองรับ LazyVerticalGrid
จะมีลักษณะดังนี้
// This part is unchanged
val lazyPagingItems = pager.collectAsLazyPagingItems()
LazyVerticalGrid(columns = GridCells.Fixed(2)) {
// Here we use the standard items API
items(
count = lazyPagingItems.itemCount,
// Here we use the new itemKey extension on LazyPagingItems to
// handle placeholders automatically, ensuring you only need to provide
// keys for real items
key = lazyPagingItems.itemKey { it.uniqueId },
// Similarly, itemContentType lets you set a custom content type for each item
contentType = lazyPagingItems.itemContentType { "contentType" }
) { index ->
// As the standard items call provides only the index, we get the item
// directly from our lazyPagingItems
val item = lazyPagingItems[index]
PagingItem(item = item)
}
}
ดูตัวอย่างเพิ่มเติมเกี่ยวกับการใช้ API ใหม่เหล่านี้ได้ที่ตัวอย่างของเรา
แม้ว่าการเปลี่ยนแปลงเหล่านี้จะทำให้ตัวอย่าง LazyColumn
และ LazyRow
ยาวขึ้น 2-3 บรรทัด แต่เราคิดว่าความสอดคล้องในเลย์เอาต์แบบ Lazy ทั้งหมดเป็นปัจจัยสำคัญสำหรับผู้ที่ใช้ Paging Compose ในอนาคต ด้วยเหตุนี้ เราจึงเลิกใช้งานส่วนขยายที่มีอยู่สำหรับ LazyListScope
แล้ว (I0c459, I92c8f, b/276989796)
การเปลี่ยนแปลง API
- เพื่ออำนวยความสะดวกในการย้ายข้อมูลไปยัง API ใหม่ ฟังก์ชันส่วนขยาย
items
และitemsIndexed
ในLazyListScope
จึงรองรับพารามิเตอร์contentType
ซึ่งเป็นการจำลองการรองรับใน API ใหม่ (Ib1918, b/255283378)
การอัปเดตการขึ้นต่อกัน
- Paging Compose ได้อัปเดตการอ้างอิงจาก Compose 1.0.5 เป็น Compose 1.2.1 แล้ว (Ib1918, b/255283378)
เวอร์ชัน 1.0.0-alpha18
8 กุมภาพันธ์ 2023
androidx.paging:paging-compose:1.0.0-alpha18
จะได้รับการเผยแพร่โดยไม่มีการเปลี่ยนแปลง เวอร์ชัน 1.0.0-alpha18 มีคอมมิตเหล่านี้
เวอร์ชัน 1.0.0-alpha17
24 ตุลาคม 2022
androidx.paging:paging-compose:1.0.0-alpha17
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.0.0-alpha17 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- เพิ่มการรองรับ
CoroutineContext
ที่กำหนดเองเมื่อโทรหาcollectLazyPagingItems
(I7a574, b/243182795, b/233783862)
เวอร์ชัน 1.0.0-alpha16
10 สิงหาคม 2022
androidx.paging:paging-compose:1.0.0-alpha16
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.0.0-alpha16 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้ Paging มีบันทึกผ่านคลาส
LazyPagingItems
เพื่อแสดงข้อมูลการแก้ไขข้อบกพร่องที่รวบรวมจาก PagingData - คุณเปิดใช้บันทึกได้ผ่านคำสั่ง
adb shell
adb shell setprop log.tag.Paging [DEBUG|VERBOSE]
([b/235527159}(https://issuetracker.google.com/issues/235527159))
การแก้ไขข้อบกพร่อง
- แก้ไขข้อผิดพลาดเกี่ยวกับตัวสร้าง
PagingDataDiffer
ที่ขาดหายไปเมื่อใช้paging-compose:1.0.0-alpha15
กับpaging-common:3.1.1
หรือเวอร์ชันที่เก่ากว่า (b/235256201,b/239868768)
เวอร์ชัน 1.0.0-alpha15
1 มิถุนายน 2022
androidx.paging:paging-compose:1.0.0-alpha15
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.0.0-alpha15 มีคอมมิตต่อไปนี้
การเปลี่ยนแปลง API
- เพิ่มตัวสร้างสำหรับ
PagingDataAdapter
และAsyncPagingDataDiffer
ซึ่งยอมรับCoroutineContext
แทนCoroutineDispatcher
(Idc878)
การแก้ไขข้อบกพร่อง
LazyPagingItems
จะตั้งค่าloadState
เริ่มต้นให้มีการรีเฟรชLoadState.Loading
(I55043, b/224855902)
เวอร์ชัน 1.0.0-alpha14
13 ตุลาคม 2021
androidx.paging:paging-compose:1.0.0-alpha14
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.0.0-alpha14 มีคอมมิตต่อไปนี้
เวอร์ชัน 1.0.0-alpha13
29 กันยายน 2021
androidx.paging:paging-compose:1.0.0-alpha13
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.0.0-alpha13 มีคอมมิตต่อไปนี้
การเปลี่ยนแปลง API
- ฟังก์ชัน
LazyPagingItems.snapshot()
ถูกแทนที่ด้วยพร็อพเพอร์ตี้LazyPagingItems.itemSnapshotList
(Ie2da8) - นำ
LazyPagingItems.getAsState()
ที่เลิกใช้งานแล้วออก (Ie65e4)
เวอร์ชัน 1.0.0-alpha12
21 กรกฎาคม 2021
androidx.paging:paging-compose:1.0.0-alpha12
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.0.0-alpha12 มีคอมมิตต่อไปนี้
การเปลี่ยนแปลง API
items(lazyPagingItems)
และitemsIndexed(lazyPagingItems)
ที่ใช้เชื่อมต่อการแบ่งหน้ากับLazyColumn/Row
ตอนนี้ยอมรับพารามิเตอร์คีย์ตัวเลือกแล้ว ซึ่งช่วยให้คุณระบุคีย์ที่เสถียรซึ่งแสดงถึงรายการได้ อ่านเพิ่มเติมเกี่ยวกับคีย์ได้ที่นี่ (I7986d)- ตอนนี้ฟังก์ชัน
lazyPagingItems.getAsState(index)
เลิกใช้งานแล้ว โปรดใช้lazyPagingItems[index]
แทน (I086cb, b/187339372)
เวอร์ชัน 1.0.0-alpha11
30 มิถุนายน 2021
androidx.paging:paging-compose:1.0.0-alpha11
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.0.0-alpha11 มีคอมมิตเหล่านี้
เวอร์ชัน 1.0.0-alpha10
2 มิถุนายน 2021
androidx.paging:paging-compose:1.0.0-alpha10
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.0.0-alpha10 มีคอมมิตเหล่านี้
เวอร์ชัน 1.0.0-alpha09
18 พฤษภาคม 2021
androidx.paging:paging-compose:1.0.0-alpha09
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.0.0-alpha09 มีคอมมิตต่อไปนี้
การแก้ไขข้อบกพร่อง
- ตอนนี้ itemCount และตัวรับรายการของ LazyPagingItems สามารถสังเกตได้แล้ว ซึ่งทำให้ใช้กับ LazyVerticalGrid ได้ด้วย (Ie2446, b/171872064, b/168285687)
ความเข้ากันได้ของ Compose
androidx.paging:paging-compose:1.0.0-alpha09
ใช้ได้กับ Compose เวอร์ชัน1.0.0-beta07
ขึ้นไปเท่านั้น
เวอร์ชัน 1.0.0-alpha08
24 กุมภาพันธ์ 2021
androidx.paging:paging-compose:1.0.0-alpha08
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.0.0-alpha08 มีคอมมิตต่อไปนี้
อัปเดตเพื่อผสานรวมกับ Compose 1.0.0-beta01
เวอร์ชัน 1.0.0-alpha07
10 กุมภาพันธ์ 2021
androidx.paging:paging-compose:1.0.0-alpha07
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.0.0-alpha07 มีคอมมิตเหล่านี้
อัปเดตเพื่อผสานรวมกับ Compose alpha12
เวอร์ชัน 1.0.0-alpha06
28 มกราคม 2021
androidx.paging:paging-compose:1.0.0-alpha06
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.0.0-alpha06 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
อัปเดตให้ขึ้นอยู่กับ Compose 1.0.0-alpha11
เวอร์ชัน 1.0.0-alpha05
13 มกราคม 2021
androidx.paging:paging-compose:1.0.0-alpha05
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.0.0-alpha05 มีคอมมิตต่อไปนี้
อัปเดตให้ขึ้นอยู่กับ Compose 1.0.0-alpha10
เวอร์ชัน 1.0.0-alpha04
16 ธันวาคม 2020
androidx.paging:paging-compose:1.0.0-alpha04
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.0.0-alpha04 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- อัปเดตพร็อพเพอร์ตี้ความสะดวก
CombinedLoadStates.refresh
,CombinedLoadStates.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
s ซึ่งแสดงฟังก์ชันการทำงานเดียวกันกับที่มีใน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
ผ่านเส้นทางความเข้ากันได้ isInvalid
ในระหว่างการเริ่มต้นของDataSource
เมื่อใช้ผ่านเส้นทางความเข้ากันได้จะเปิดใช้ใน fetchDispatcher อย่างถูกต้องแทนที่จะเป็นในเทรดหลัก การแก้ไขนี้จะช่วยแก้ปัญหาIllegalStateException
ที่เกิดจากการเข้าถึง Db ในเทรดหลักเมื่อใช้การติดตั้งใช้งานPagingSource
ของ Room
เวอร์ชัน 3.0.0-alpha13
27 มกราคม 2021
androidx.paging:paging-*:3.0.0-alpha13
ได้รับการเผยแพร่แล้ว เวอร์ชัน 3.0.0-alpha13 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
PagingSource.getRefreshKey
ไม่ใช่ตัวเลือกที่ไม่บังคับอีกต่อไป แต่เป็นฟังก์ชันนามธรรมที่ไม่มีการติดตั้งใช้งานเริ่มต้น ผู้ใช้ที่ย้ายข้อมูลสามารถเลือกที่จะใช้การติดตั้งใช้งานเริ่มต้นต่อไปได้ ซึ่งจะแสดงผลเป็นnull
แต่getRefreshKey()
ควรมีการติดตั้งใช้งานจริงที่แสดงผลคีย์ตามตำแหน่งการเลื่อนปัจจุบันของผู้ใช้ ซึ่งจะช่วยให้การแบ่งหน้าโหลดต่อไปได้ โดยมีวิวพอร์ตเป็นศูนย์กลางผ่านPagingState.anchorPosition
หากเป็นไปได้ (I4339a)- ตอนนี้
InvalidatingPagingSourceFactory
เป็นคลาสสุดท้ายแล้ว (Ia3b0a) - อนุญาตการกำหนดค่าลักษณะการทำงานของตัวคั่นเทอร์มินัล (ส่วนหัว / ส่วนท้าย)
ด้วยพารามิเตอร์ SeparatorType เพิ่มเติมที่ไม่บังคับ โดยมี 2 ตัวเลือก
ดังนี้
FULLY_COMPLETE
- ลักษณะการทำงานที่มีอยู่ รอให้ทั้ง PagingSource และ RemoteMediator ทำเครื่องหมาย endOfPaginationReached ก่อนเพิ่มตัวคั่น เทอร์มินัล หากไม่ได้ใช้ RemoteMediator ระบบจะ ละเว้น loadState ระยะไกล ซึ่งจะมีประโยชน์หลักๆ ในกรณีที่คุณต้องการแสดงตัวคั่นส่วน เฉพาะเมื่อส่วนนั้นโหลดเสร็จสมบูรณ์แล้ว รวมถึงการดึงข้อมูลจาก แหล่งที่มาภายนอก เช่น เครือข่ายSOURCE_COMPLETE
- รอให้ PagingSource ทำเครื่องหมาย endOfPaginationReached แม้ว่าจะใช้ RemoteMediator ก็ตาม ซึ่งจะช่วยให้แสดงส่วนหัวและส่วนท้ายพร้อมกับการโหลดครั้งแรกได้ ซึ่งจะช่วยให้ผู้ใช้ไม่ต้องเลื่อนเพื่อดูตัวคั่นสุดท้าย (Ibe993, b/174700218)
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาหน่วยความจำรั่วที่เกิดขึ้นได้ยาก ซึ่งเกิดขึ้นเมื่อมีการ ล้างค่า PagingSource ก่อนที่ PageFetcher จะเริ่มโหลดจาก PagingSource ได้ (I9606b, b/174625633)
เวอร์ชัน 3.0.0-alpha12
13 มกราคม 2021
androidx.paging:paging-*:3.0.0-alpha12
ได้รับการเผยแพร่แล้ว เวอร์ชัน 3.0.0-alpha12 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- InvalidatingPagingSourceFactory ไม่ใช่คลาส Abstract อีกต่อไป เนื่องจากไม่มีเมธอด Abstract (I4a8c4)
- เพิ่มการโอเวอร์โหลดของ .cachedIn() ที่ยอมรับ ViewModel แทน Lifecycle หรือ CoroutineScope สำหรับผู้ใช้ Java (I97d81, b/175332619)
- อนุญาตให้ผู้เรียกใช้ Java ใช้การดำเนินการเปลี่ยนรูปแบบ PagingData ในลักษณะที่ไม่พร้อมกันโดยการยอมรับ Executor ลงในอาร์กิวเมนต์ของตัวดำเนินการเปลี่ยนรูปแบบ ตอนนี้ระบบได้นำคำต่อท้าย -Sync ออกจากตัวดำเนินการแปลง -Sync ทั้งหมดแล้ว และผู้ใช้ Kotlin Coroutine จะต้องแยกความแตกต่างโดยการเรียกฟังก์ชันส่วนขยายที่ยอมรับบล็อกที่ระงับแทน
เราได้ย้ายโอเปอเรเตอร์การเปลี่ยนรูปแบบ PagingData ทั้งหมดไปไว้ในส่วนขยาย
ภายใต้คลาส PagingDataTransforms แบบคงที่ ผู้ใช้ Java จะต้อง
เรียกใช้ผ่านตัวช่วยแบบคงที่ เช่น
PagingDataTransforms.map(pagingData, transform)
สำหรับผู้ใช้ Kotlin ไวยากรณ์จะเหมือนกัน แต่คุณจะต้องนำเข้าฟังก์ชัน (If6885, b/172895919)
การแก้ไขข้อบกพร่อง
- แก้ไขข้อบกพร่องที่ทำให้ไม่มีการเรียกใช้
RemoteMediator.load()
ระหว่างadapter.refresh()
หากถึงจุดสิ้นสุดของการแบ่งหน้าแล้ว
เวอร์ชัน 3.0.0-alpha11
16 ธันวาคม 2020
androidx.paging:paging-*:3.0.0-alpha11
ได้รับการเผยแพร่แล้ว เวอร์ชัน 3.0.0-alpha11 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- เพิ่มการรองรับสถานะที่บันทึกไว้สำหรับกรณีการใช้งานพื้นฐานต่อไปนี้ (การรองรับแบบเต็ม โดยเฉพาะในกรณีแหล่งที่มาแบบเลเยอร์ยังอยู่ระหว่างดำเนินการ)
- แคชโฟลว์และไม่ได้ปิดแอปพลิเคชัน (เช่น แคชโฟลว์ใน ViewModel และกิจกรรมจะสร้างขึ้นใหม่ในกระบวนการ)
- ระบบจะนับแหล่งที่มาของการแบ่งหน้า เปิดใช้ตัวยึดตำแหน่ง และเลย์เอาต์ ไม่เหลื่อมกัน
การเปลี่ยนแปลง API
PagingSource.getRefreshKey()
ตอนนี้เป็น API ที่เสถียรแล้ว (I22f6f, b/173530980)PagingSource.invalidate
ไม่ใช่ฟังก์ชันที่เปิดให้ใช้งานอีกต่อไป หากต้องการรับการแจ้งเตือนเมื่อมีการลบล้าง ให้พิจารณาเรียกใช้เมธอด registerInvalidatedCallback แทนการลบล้าง invalidate (I628d9, b/173029013, b/137971356)- ตอนนี้ Pager มีตัวสร้างทดลองตัวเดียวควบคู่ไปกับตัวสร้างปกติ แทนที่จะรั่วไหล API ทดลองไปยัง API สาธารณะที่ไม่ใช่แบบทดลองผ่านคำอธิบายประกอบการเลือกใช้ (I9dc61, b/174531520)
- อัปเดตพร็อพเพอร์ตี้ความสะดวก
CombinedLoadStates.refresh
,CombinedLoadStates.prepend
CombinedLoadStates.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
REFRESH
now correctly propagate to LoadState updates and prevents remoteAPPEND
andPREPEND
from triggering. (I94a3f, b/155290248) - การแสดงรายการที่ว่างเปล่าเนื่องจากหน้าเริ่มต้นว่างเปล่าหรือ
การกรองที่เข้มงวดจะไม่ทำให้การแบ่งหน้าไม่เริ่มทำงาน
PREPEND
หรือโหลดAPPEND
อีกต่อไป (I3e702, b/168169730) - แก้ไขปัญหาที่
getRefreshKey
ไม่ได้รับการเรียกใช้ใน PagingSource รุ่นต่อๆ ไปเมื่อมีการล้างข้อมูลอย่างรวดเร็ว (I45460, b/170027530)
การมีส่วนร่วมภายนอก
- เพิ่มคลาส Abstract ใหม่ชื่อ InvalidatingPagingSourceFactory
พร้อมด้วย
.invalidate()
API ที่ส่งต่อการล้างข้อมูลไปยัง PagingSource ทั้งหมด ที่ปล่อยออกมา ขอขอบคุณ @claraf3 (Ie71fc, b/160716447)
ปัญหาที่ทราบ
- ส่วนหัวและส่วนท้ายจากการเปลี่ยนรูปแบบ .insertSeparators() อาจไม่ปรากฏในทันทีเมื่อใช้ RemoteMediator b/172254056
- การใช้ RemoteMediator อาจทำให้
LoadState
ระยะไกลค้างหากการลบล้างและPagingSource.load(LoadParams.Refresh(...))
เสร็จสมบูรณ์ก่อนที่RemoteMediator.load()
จะแสดงผล b/173717820
เวอร์ชัน 3.0.0-alpha09
11 พฤศจิกายน 2020
androidx.paging:paging-*:3.0.0-alpha09
ได้รับการเผยแพร่แล้ว เวอร์ชัน 3.0.0-alpha09 มีคอมมิตต่อไปนี้
การเปลี่ยนแปลง API
- เลิกใช้งานเมธอด dataRefreshFlow / Listener อย่างสมบูรณ์ด้วย replaceWith clause (I6e2dd)
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่เกิด
IllegalArgumentException
เมื่อใช้ตัวคั่นกับ RemoteMediator และมีการทริกเกอร์การล้างข้อมูลขณะที่การโหลดจากระยะไกลซึ่งจะแสดงผล endOfPagination ยังคงทำงานอยู่ (I3a260)
เวอร์ชัน 3.0.0-alpha08
28 ตุลาคม 2020
androidx.paging:paging-*:3.0.0-alpha08
ได้รับการเผยแพร่แล้ว เวอร์ชัน 3.0.0-alpha08 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- ตัวแปร Kotlin / Java ของ
DataSource.InvalidatedCallback
ได้รับการรวมเข้าด้วยกันโดยการเปิดใช้การแปลง SAM ใน Kotlin ผ่านอินเทอร์เฟซฟังก์ชัน (พร้อมใช้งานใน Kotlin 1.4) นอกจากนี้ยังแก้ไขข้อบกพร่องที่ไม่ได้เรียกใช้ รูปแบบ Kotlin ของการเรียกกลับ invalidate หลังจากที่แปลงแล้ว โดย.map
หรือ.mapByPage
(I1f244, b/165313046)
การแก้ไขข้อบกพร่อง
- เราได้ปรับปรุงการโต้ตอบของ Paging กับ ViewPager อย่างมาก กล่าวคือ การแบ่งหน้าจะไม่ยกเลิกการเรียกใช้
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)
- แก้ไข Race Condition ในการแปลง DataSource -> PagingSource ซึ่งอาจทำให้ PagingSource ที่ได้ไม่สนใจสัญญาณการลบล้างจาก DataSource
- แก้ไขปัญหาในตรรกะการดึงข้อมูลหน้าซึ่งบางครั้งอาจทำให้ไม่สามารถเลือก PagingSource รุ่นใหม่ได้จนกว่าจะมีการเรียกใช้ PagingDataAdapter.refresh()
- แก้ไขปัญหาที่ทำให้บางครั้งตำแหน่งการเลื่อนหายไปเมื่อใช้ DataSource ที่แปลงเป็น PagingSource (เช่น รายการที่สร้างโดย Room) ร่วมกับ RemoteMediator
การมีส่วนร่วมภายนอก
- ขอขอบคุณ @simonschiller ที่เพิ่มตัวดำเนินการแปลงแบบไม่พร้อมกันที่อิงตาม RxJava2, RxJava3 และ Guava สำหรับ PagingData
เวอร์ชัน 3.0.0-alpha06
2 กันยายน 2020
androidx.paging:paging-*:3.0.0-alpha06
ได้รับการเผยแพร่แล้ว เวอร์ชัน 3.0.0-alpha06 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
UnsupportedOperationException
พร้อมข้อความที่ชัดเจนยิ่งขึ้นเกี่ยวกับการ ไม่รองรับรหัสที่เสถียรจะแสดงขึ้นทุกครั้งที่มีการเรียกใช้PagingDataAdapter.setHasStableIds
(Ib3890, b/158801427)
การแก้ไขข้อบกพร่อง
- insertSeparators จะไม่กรองหน้าว่างออกอีกต่อไป ซึ่งจะช่วยให้ ผู้แสดงเคารพระยะทางในการดึงข้อมูลล่วงหน้าได้แม้ในกรณีที่มีการแทรกหน้าว่างจำนวนมาก (I9cff6, b/162538908)
เวอร์ชัน 3.0.0-alpha05
19 สิงหาคม 2020
androidx.paging:paging-*:3.0.0-alpha05
ได้รับการเผยแพร่แล้ว เวอร์ชัน 3.0.0-alpha05 มีคอมมิตต่อไปนี้
การแก้ไขข้อบกพร่อง
- ตอนนี้การแบ่งหน้าจะโหลดหน้าเว็บล่วงหน้าอย่างถูกต้องแม้ว่าจะกรองข้อมูลที่แสดงอย่างละเอียดก็ตาม
- การส่ง
LoadResult.Error
กลับไปโหลดซ้ำจะไม่ทำให้การเข้าถึงรายการทริกเกอร์การลองใหม่ซ้ำอย่างไม่ถูกต้องอีกต่อไป
การมีส่วนร่วมภายนอก
- ขอขอบคุณ Clara F ที่ช่วยเราทำความสะอาดการทดสอบบางอย่าง (549612)
เวอร์ชัน 3.0.0-alpha04
5 สิงหาคม 2020
androidx.paging:paging-*:3.0.0-alpha04
ได้รับการเผยแพร่แล้ว เวอร์ชัน 3.0.0-alpha04 มีคอมมิตต่อไปนี้
การเปลี่ยนแปลง API
- เพิ่ม
peek()
API ลงในAsyncPagingDataDiffer
และPagingDataAdapter
เพื่ออนุญาตให้เข้าถึงข้อมูลที่แสดงโดยไม่ต้องโหลดหน้าเว็บที่ทริกเกอร์ (I38898, b/159104197) - เพิ่ม
snapshot()
API ลงในPagingDataAdapter
และAsyncPagingDataDiffer
เพื่อให้ดึงข้อมูลรายการที่แสดงได้โดยไม่ต้อง ทริกเกอร์การดึงข้อมูลหน้าเว็บ (I566b6, b/159104197) - เพิ่ม
PagingData.from(List<T>)
ตัวสร้างเพื่ออนุญาต การแสดงรายการแบบคงที่ ซึ่งสามารถใช้ร่วมกับโฟลว์ PagingData โดยรวม เพื่อแสดงรายการแบบคงที่ในบางสถานะ เช่น ก่อน การรีเฟรชครั้งแรกจะเสร็จสิ้น หรือใช้เพื่อทดสอบการเปลี่ยนรูปแบบ (Id134d) - เลิกใช้งาน DataRefresh Flow / Listener API เนื่องจากมีไว้เพื่อแสดงสถานะของรายการที่แสดงเมื่อรีเฟรช แต่ด้วยการปรับปรุงเวลาเรียกกลับของ LoadState Flow / Listener และพร็อพเพอร์ตี้ itemCount จึงซ้ำซ้อน (Ia19f3)
- เพิ่ม Wrapper ความเข้ากันได้ของ RxJava3 สำหรับ
PagingSource
และRemoteMediator
(I49ef3, b/161480176)
การแก้ไขข้อบกพร่อง
PositionalDataSource
ที่แปลงเป็นPagingSource
ผ่านtoPagingSourceFactory
Helper รวมถึง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 ของแหล่งข้อมูล Hid จาก 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 กลับมาใช้ซ้ำในโรงงานเพื่อป้องกันการนำ 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
- การรองรับโครูทีนและ Flow ของ Kotlin อย่างเต็มรูปแบบ
- รองรับการโหลดแบบอะซิงโครนัสด้วยฟังก์ชันระงับโครูทีน, RxJava Single หรือ Guava ListenableFuture primitives
- สัญญาณสถานะการโหลดและข้อผิดพลาดในตัวสำหรับการออกแบบ UI ที่ตอบสนอง รวมถึงฟังก์ชันการลองอีกครั้งและการรีเฟรช
- การปรับปรุงเลเยอร์ที่เก็บ
- อินเทอร์เฟซแหล่งข้อมูลที่เรียบง่าย
- การแบ่งหน้าเครือข่าย + ฐานข้อมูลที่ง่ายขึ้น
- การสนับสนุนการยกเลิก
- การปรับปรุงเลเยอร์การนำเสนอ
ปัญหาที่ทราบ
- Javadoc ของ 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 และฟังก์ชันที่ยังไม่ได้ใช้งานบางส่วนเปิดเผยต่อสาธารณะ ซึ่งฟีเจอร์เหล่านี้จะพร้อมใช้งานในรุ่นต่อๆ ไปการแบ่งหน้า
2.1.2
มีการแก้ไขการโหลดที่กึ่งกลางซึ่งเปิดตัวครั้งแรกใน 2.1.1 แต่ครั้งนี้ได้เลือกอย่างถูกต้องบนการเปิดตัว 2.1.0 ขอแนะนำเป็นอย่างยิ่งให้อัปเกรดเป็นรุ่นนี้ หากคุณใช้เวอร์ชัน 2.1.1 อยู่
เวอร์ชัน 2.1.1
เวอร์ชัน 2.1.1
18 ธันวาคม 2019
androidx.paging:paging-*:2.1.1
ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.1.1 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- ตอนนี้การโหลดเริ่มต้นที่ต่อเนื่องจาก PositionalDataSources จะอยู่ตรงกลางรอบการเข้าถึงครั้งล่าสุดเมื่อปิดใช้ตัวยึดตำแหน่ง
เวอร์ชัน 2.1.0
เวอร์ชัน 2.1.0
25 มกราคม 2019
การแบ่งหน้า 2.1.0
จะเปิดตัวโดยไม่มีการเปลี่ยนแปลงจาก 2.1.0-rc01
เวอร์ชัน 2.1.0-rc01
6 ธันวาคม 2018
การแบ่งหน้า 2.1.0-rc01
จะเปิดตัวโดยไม่มีการเปลี่ยนแปลงจาก 2.1.0-beta01
เวอร์ชัน 2.1.0-beta01
1 พฤศจิกายน 2018
การแบ่งหน้า 2.1.0-beta01
จะเปิดตัวโดยไม่มีการเปลี่ยนแปลงจาก 2.1.0-alpha01
เวอร์ชัน 2.1.0-alpha01
12 ตุลาคม 2018
Paging 2.1.0-alpha01
มีการเพิ่มฟีเจอร์หลัก 2 อย่าง ได้แก่ การทิ้งหน้า และไลบรารีส่วนขยาย KTX สำหรับทุกอาร์ติแฟกต์ รวมถึงการเปลี่ยนแปลง API อื่นๆ และการแก้ไขข้อบกพร่องอีกหลายอย่าง
การเปลี่ยนแปลง API
- เพิ่ม
PagedList.Config.Builder.setMaxSize()
เพื่อจำกัดจำนวนรายการที่โหลดในหน่วยความจำ - เพิ่ม
androidx.paging.Config()
เป็นทางเลือก Kotlin สำหรับPagedList.Config.Builder
- เพิ่ม
androidx.paging.PagedList()
เป็นทางเลือก Kotlin สำหรับPagedList.Builder
- เพิ่ม
DataSourceFactory.toLiveData()
เป็นทางเลือก Kotlin สำหรับLivePagedListBuilder
- เพิ่ม
DataSourceFactory.toObservable()
และtoFlowable()
เป็นทางเลือก Kotlin สำหรับRxPagedListBuilder
- เพิ่ม
AsyncPagedListDiffer.addPagedListListener()
สำหรับการฟังเมื่อมีการสลับ PagedList b/111698609 - เพิ่ม
PagedListAdapter.onCurrentListChanged()
ตัวแปรที่ส่งผ่านรายการเก่าและใหม่ เลิกใช้งานตัวแปรก่อนหน้า - เพิ่มตัวแปร
PagedListAdapter/AsyncPagedListDiffer.submitList()
ซึ่งใช้ Callback เพิ่มเติมที่จะทริกเกอร์เมื่อ/หากมีการแสดงรายการแบบแบ่งหน้าหลังจากเปรียบเทียบความแตกต่าง ซึ่งจะช่วยให้คุณซิงโครไนซ์การสลับ PagedList กับการอัปเดต UI อื่นๆ ได้ b/73781068 PagedList.getLoadedCount()
เพื่อให้คุณทราบว่ามีรายการอยู่ในหน่วยความจำกี่รายการ โปรดทราบว่าค่าที่ส่งคืนจะเท่ากับ.size()
เสมอหากปิดใช้ตัวยึดตำแหน่ง
การแก้ไขข้อบกพร่อง
- แก้ไขเงื่อนไขการแข่งขันเมื่อทำการเปรียบเทียบหากมีการนำรายการกลับมาใช้ซ้ำ b/111591017
PagedList.loadAround()
จะแสดงข้อผิดพลาดIndexOutOfBoundsException
เมื่อดัชนีไม่ถูกต้อง ก่อนหน้านี้แอปอาจขัดข้องโดยมีข้อยกเว้นอื่นๆ ที่ไม่ชัดเจน- แก้ไขกรณีที่ขนาดการโหลดเริ่มต้นที่เล็กมากร่วมกับข้อมูลที่ไม่เปลี่ยนแปลงจะส่งผลให้ไม่มีการโหลดเพิ่มเติม b/113122599
เวอร์ชัน 2.0.0
เวอร์ชัน 2.0.0
1 ตุลาคม 2018
Paging 2.0.0
เปิดตัวพร้อมการแก้ไขข้อบกพร่องเพียงรายการเดียว
การแก้ไขข้อบกพร่อง
- แก้ไขข้อขัดข้องที่อาจเกิดขึ้นเมื่อเลื่อนอย่างรวดเร็วโดยใช้
PositionalDataSource
และตัวยึดตำแหน่ง b/114635383
เวอร์ชัน 2.0.0-beta01
2 กรกฎาคม 2018
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาเนื้อหาหายไปในบางกรณีที่ใช้การเพิ่มด้านหน้า (ปิดใช้ตัวยึดตำแหน่ง, PositionalDataSource) b/80149146
- (เปิดตัวแล้วใน
1.0.1
) แก้ไขปัญหาการขัดข้องที่PagedListAdapter
และAsyncPagedListDiffer
ไม่สามารถส่งสัญญาณเหตุการณ์การย้าย b/110711937
การอ้างอิงก่อน AndroidX
สำหรับ Paging เวอร์ชันก่อน AndroidX ที่ตามมา ให้รวมการขึ้นต่อกันต่อไปนี้
dependencies {
def paging_version = "1.0.0"
implementation "android.arch.paging:runtime:$paging_version"
// alternatively - without Android dependencies for testing
testImplementation "android.arch.paging:common:$paging_version"
// optional - RxJava support
implementation "android.arch.paging:rxjava2:$paging_version"
}
เวอร์ชัน 1.0.1
เวอร์ชัน 1.0.1
26 มิถุนายน 2018
Paging 1.0.1
เปิดตัวพร้อมการแก้ไขข้อบกพร่องเพียงรายการเดียวใน runtime
เราขอแนะนำให้ใช้ 1.0.1
เพื่อความเสถียร นอกจากนี้ เรายังได้เปิดตัว Paging RxJava2 1.0.1
ซึ่งเหมือนกับ 1.0.0-rc1
ทุกประการ
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาการขัดข้องที่
PagedListAdapter
และAsyncPagedListDiffer
ไม่สามารถส่งสัญญาณเหตุการณ์การย้าย b/110711937
RxJava2 เวอร์ชัน 1.0.0
RxJava2 เวอร์ชัน 1.0.0-rc1
16 พฤษภาคม 2018
Paging RxJava2 1.0.0-rc1
จะเปลี่ยนไปเป็นรุ่นที่อาจได้รับการเผยแพร่โดยไม่มีการเปลี่ยนแปลงจากอัลฟ่ารุ่นแรก
เวอร์ชัน 1.0.0
เวอร์ชัน 1.0.0-rc1
19 เมษายน 2018 รุ่นที่อาจได้รับการเผยแพร่ของการแบ่งหน้า
เราไม่มีปัญหาที่ทราบเพิ่มเติมหรือฟีเจอร์ใหม่ที่กำหนดไว้สำหรับการเปิดตัว
การแบ่งหน้า1.0.0
โปรดอัปเกรดโปรเจ็กต์เพื่อใช้ 1.0.0-rc1
และช่วยเราทดสอบเพื่อหาข้อบกพร่อง เพื่อให้เราสามารถเปิดตัว 1.0.0
ที่เสถียรได้
รุ่นนี้ไม่มีการเปลี่ยนแปลงใดๆ โดยจะเหมือนกับ 1.0.0-beta1
เวอร์ชัน 1.0.0-beta1
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แก้ไขลักษณะการทำงานของการลบล้างใน
DataSource
Wrapper ภายใน (ใช้เพื่อติดตั้งใช้งานDataSource.map
รวมถึงการโหลดPositionalDataSource
ที่ปิดใช้ตัวยึดตำแหน่ง) b/77237534
เวอร์ชัน 1.0.0-alpha7
21 มีนาคม 2018
การแบ่งหน้า 1.0.0-alpha7
จะเปิดตัวพร้อมกับวงจรของลูกค้า 1.1.1
เนื่องจาก Paging alpha7 ขึ้นอยู่กับการย้ายคลาส Function
ที่กล่าวถึงข้างต้น คุณจะต้องอัปเดตการอ้างอิง lifecycle:runtime
เป็น android.arch.lifecycle:runtime:1.1.1
เราวางแผนที่จะให้ alpha7
เป็นรุ่นสุดท้ายก่อนที่ฟีเจอร์การเพจจะเข้าสู่รุ่นเบต้า
การเปลี่ยนแปลง API
- ตอนนี้ออบเจ็กต์
DataSource.LoadParams
มีตัวสร้างสาธารณะแล้ว และออบเจ็กต์DataSource.LoadCallback
เป็นนามธรรมแล้ว ซึ่งช่วยให้คุณสามารถห่อหุ้มDataSource
หรือทดสอบDataSource
โดยตรงด้วยการเรียกกลับจำลอง b/72600421 - Mapper สำหรับ DataSource และ DataSource.Factory
map(Function<IN,OUT>)
ช่วยให้คุณเปลี่ยนรูป ห่อ หรือตกแต่งผลลัพธ์ที่โหลดโดยDataSource
mapByPage(<List<IN>,List<OUT>>)
ช่วยให้ทำเช่นเดียวกันกับการประมวลผลแบบกลุ่มได้ (เช่น หากรายการที่โหลดจาก SQL ต้องค้นหาฐานข้อมูลแยกต่างหากเพิ่มเติม ก็สามารถทำได้เป็นกลุ่ม)
- เพิ่ม
PagedList#getDataSource()
เป็นวิธีการที่สะดวก b/72611341 - เราได้นำคลาสที่เลิกใช้งานแล้วทั้งหมดออกจาก API รวมถึงส่วนที่เหลือของแพ็กเกจ
recyclerview.extensions
และLivePagedListProvider
DataSource.Factory
เปลี่ยนจากอินเทอร์เฟซเป็นคลาสแบบนามธรรมเพื่อเปิดใช้ฟังก์ชันแผนที่
การแก้ไขข้อบกพร่อง
- เปลี่ยน Builders ให้เป็น final b/70848565
- ตอนนี้เราได้แก้ไขการติดตั้งใช้งาน Room
DataSource
เพื่อรองรับการค้นหาหลายตารางแล้ว โดยการแก้ไขนี้อยู่ใน Room 1.1.0-beta1 ดูด้านบน - แก้ไขข้อบกพร่องที่
BoundaryCallback.onItemAtEndLoaded
จะไม่เรียกใช้สำหรับPositionalDataSource
หากเปิดใช้ตัวยึดตำแหน่งและ ขนาดทั้งหมดเป็นผลคูณที่แน่นอนของขนาดหน้าเว็บ
เวอร์ชัน 1.0.0-alpha5
22 มกราคม 2018
การแก้ไขข้อบกพร่อง
- แก้ไขการโหลดหน้าเว็บเมื่อปิดใช้ตัวยึดตำแหน่ง b/70573345
- การบันทึกเพิ่มเติมเพื่อติดตามข้อบกพร่อง IllegalArgumentException b/70360195 (และการแก้ไขฝั่ง Room โดยคาดการณ์)
- แก้ไขโค้ดตัวอย่าง Javadoc b/70411933, b/71467637