การแบ่งหน้า
ตารางนี้แสดงรายการอาร์ติแฟกต์ทั้งหมดในกลุ่ม androidx.paging
อาร์ติแฟกต์ | รุ่นที่เสถียร | ตัวเลือกถอนการอ้างสิทธิ์ | รุ่นเบต้า | รุ่นอัลฟ่า |
---|---|---|---|---|
การแบ่งหน้า-* | 3.3.2 | - | - | - |
การแบ่งหน้า | 3.3.2 | - | - | - |
การประกาศทรัพยากร Dependency
หากต้องการเพิ่มทรัพยากร Dependency สำหรับการแบ่งหน้า คุณต้องเพิ่มที่เก็บของ Google Maven ไปยัง อ่านที่เก็บ Maven ของ Google เพื่อดูข้อมูลเพิ่มเติม
เพิ่มทรัพยากร Dependency สำหรับอาร์ติแฟกต์ที่คุณต้องการในไฟล์ build.gradle
สำหรับ
ในแอปหรือโมดูล
ดึงดูด
dependencies { def paging_version = "3.3.2" implementation "androidx.paging:paging-runtime:$paging_version" // alternatively - without Android dependencies for tests testImplementation "androidx.paging:paging-common:$paging_version" // optional - RxJava2 support implementation "androidx.paging:paging-rxjava2:$paging_version" // optional - RxJava3 support implementation "androidx.paging:paging-rxjava3:$paging_version" // optional - Guava ListenableFuture support implementation "androidx.paging:paging-guava:$paging_version" // optional - Jetpack Compose integration implementation "androidx.paging:paging-compose:3.3.2" }
Kotlin
dependencies { val paging_version = "3.3.2" implementation("androidx.paging:paging-runtime:$paging_version") // alternatively - without Android dependencies for tests testImplementation("androidx.paging:paging-common:$paging_version") // optional - RxJava2 support implementation("androidx.paging:paging-rxjava2:$paging_version") // optional - RxJava3 support implementation("androidx.paging:paging-rxjava3:$paging_version") // optional - Guava ListenableFuture support implementation("androidx.paging:paging-guava:$paging_version") // optional - Jetpack Compose integration implementation("androidx.paging:paging-compose:3.3.2") }
ดูข้อมูลเกี่ยวกับการใช้ส่วนขยาย Kotlin ได้ที่ เอกสารประกอบของ ktx
ดูข้อมูลเพิ่มเติมเกี่ยวกับทรัพยากร Dependency ได้ที่หัวข้อเพิ่มการอ้างอิงของบิลด์
ความคิดเห็น
ความคิดเห็นของคุณช่วยปรับปรุง Jetpack ให้ดียิ่งขึ้น โปรดแจ้งให้เราทราบหากคุณพบปัญหาใหม่หรือมี ไอเดียในการปรับปรุงไลบรารีนี้ โปรดดูที่ ปัญหาที่มีอยู่ ในไลบรารีนี้ก่อนที่จะสร้างใหม่ คุณสามารถเพิ่มการโหวตให้กับปัญหาที่มีอยู่ได้โดย คลิกปุ่มดาว
ดูเอกสารประกอบเกี่ยวกับเครื่องมือติดตามปัญหา เพื่อดูข้อมูลเพิ่มเติม
เวอร์ชัน 3.3
เวอร์ชัน 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 ที่สร้างต่อยอด เช่นPagingDataAdapter
ที่ใช้กับRecyclerView
เรียกการโหลดเพิ่มไม่ได้เมื่อมีการรีเฟรชแหล่งข้อมูลสำรองขณะเลื่อน (I60ca5, b/352586078) - แก้ไขข้อขัดข้องที่เกิดขึ้นเมื่อนำรายการออกจากแหล่งข้อมูลสำรองขณะเลื่อน
RecyclerView
โดยใช้PagingDataAdapter
หรือAsyncPagingDataDiffer
(I8c65a, b/347649763)
เวอร์ชัน 3.3.0
14 พฤษภาคม 2024
ปล่อย androidx.paging:paging-*:3.3.0
แล้ว เวอร์ชัน 3.3.0 มีคอมมิตเหล่านี้
การเปลี่ยนแปลงที่สำคัญตั้งแต่ 3.2.0
PagingDataPresenter
เป็นชั้นเรียนสาธารณะแล้ว สร้างผู้นำเสนอหลายแพลตฟอร์มบนPagingDataPresenter
ได้แล้ว แทนที่จะต้องใช้ Paging API ภายในหรือAsyncPagingDataDiffer
ของpaging-runtime
- เพิ่มเมธอดตัวช่วยแบบ
LoadStates
และCombinedLoadStates
ใหม่ในhasError
และisIdle
เพื่อตรวจสอบว่าLoadStates
อยู่ในสถานะ "มีข้อผิดพลาด" หรือNotLoading
ตามลำดับ รวมถึงเพิ่มเมธอดส่วนขยาย Kotlin ของawaitNotLoading()
ใหม่ในFlow<CombinedLoadStates>
ซึ่งรอจนกว่าการโหลดจะเปลี่ยนเป็นNotLoading
หรือสถานะข้อผิดพลาด - ตอนนี้
PagingData.empty()
จะส่งNotLoading
สถานะโดยค่าเริ่มต้น เว้นแต่จะมีการส่งLoadStates
ที่กำหนดเองไปยังเครื่องมือสร้าง ซึ่งออกจากลักษณะการทำงานที่มีอยู่ที่ไม่ส่งLoadStates
เมื่อส่งไปยังPagingDataAdapter
หรือส่งสถานะการโหลดเมื่อรวบรวมเป็นLazyPagingItems
เมื่อรวบรวมเป็นLazyPagingItems
ตอนนี้ก็จะแสดงรายการที่ว่างเปล่าทันทีเมื่อเขียนครั้งแรก
ความเข้ากันได้กับหลายแพลตฟอร์มของ Kotlin
ปัจจุบันการแบ่งหน้าจะจัดส่งอาร์ติแฟกต์ที่เข้ากันได้กับ Kotlin Multiplatform ซึ่งส่วนใหญ่แล้วเป็นงานอัปสตรีมจากโปรเจ็กต์ Multiplatform-Paging ของ CashApp
paging-common
ได้ย้าย Paging 3 API ทั้งหมดไปยังcommon
แล้ว และตอนนี้เข้ากันได้กับ jvm และ iOS นอกเหนือจาก Android แล้วpaging-testing
ได้ย้ายโค้ดไปยังcommon
แล้ว และตอนนี้เข้ากันได้กับ jvm และ iOS นอกเหนือจาก 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
- ตอนนี้การแบ่งหน้าใช้คำอธิบายประกอบ AndroidX Annotation
@MainThread
สำหรับโค้ดทั่วไป (I78f0d, b/327682438)
เวอร์ชัน 3.3.0-alpha04
6 มีนาคม 2024
ปล่อย androidx.paging:paging-*:3.3.0-alpha04
แล้ว เวอร์ชัน 3.3.0-alpha04 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- แก้ไขข้อผิดพลาดเล็กน้อยในเอกสารที่เกี่ยวข้องกับการเพิ่มความเข้ากันได้กับแพลตฟอร์มต่างๆ ของ Kotlin (aosp/2950785)
เวอร์ชัน 3.3.0-alpha03
7 กุมภาพันธ์ 2024
ปล่อย androidx.paging:paging-*:3.3.0-alpha03
แล้ว เวอร์ชัน 3.3.0-alpha03 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
PagingDataPresenter
เป็นชั้นเรียนสาธารณะแล้ว สร้างผู้นำเสนอหลายแพลตฟอร์มบนPagingDataPresenter
ได้แล้ว แทนที่จะต้องใช้ Paging API ภายในหรือAsyncPagingDataDiffer
ของpaging-runtime
(Id1f74, b/315214786)- เพิ่มเมธอดตัวช่วยของ
LoadStates
และCombinedLoadStates
ใหม่เพื่อตรวจสอบว่าLoadStates
อยู่ในสถานะ "มีข้อผิดพลาด" หรือ "NotLoading
" หรือไม่ รวมถึงเพิ่ม API ใหม่ที่รออยู่ในLoadStateFlow
จนกว่าการโหลดจะเปลี่ยนเป็นNotLoading
หรือสถานะข้อผิดพลาด (Id6c67)
การเปลี่ยนแปลงลักษณะการทำงาน
- ตอนนี้
PagingData.empty()
จะส่งNotLoading
สถานะโดยค่าเริ่มต้น เว้นแต่จะมีการส่งLoadStates
ที่กำหนดเองไปยังเครื่องมือสร้าง ซึ่งออกจากลักษณะการทำงานที่มีอยู่ที่ไม่ส่งLoadStates
เมื่อส่งไปยังPagingDataAdapter
หรือส่งสถานะการโหลดเมื่อรวบรวมเป็นLazyPagingItems
เมื่อรวบรวมเป็นLazyPagingItems
ตอนนี้ก็จะแสดงรายการที่ว่างเปล่าทันทีเมื่อเขียนครั้งแรก (I4d11d, b/301833847)
เวอร์ชัน 3.3.0-alpha02
20 กันยายน 2023
ปล่อย androidx.paging:paging-*:3.3.0-alpha02
แล้ว เวอร์ชัน 3.3.0-alpha02 มีคอมมิตเหล่านี้
ความเข้ากันได้กับหลายแพลตฟอร์มของ Kotlin
ปัจจุบันการแบ่งหน้าจะจัดส่งอาร์ติแฟกต์ที่เข้ากันได้กับ Kotlin Multiplatform ซึ่งส่วนใหญ่แล้วเป็นงานอัปสตรีมจากโปรเจ็กต์ Multiplatform-Paging ของ CashApp วิธีนี้จะช่วยให้เราหลีกเลี่ยงการแตกต่างกันระหว่างที่เก็บ 2 รายการและทำให้ที่เก็บใช้ร่วมกันได้
paging-common
ได้ย้าย Paging 3 API ทั้งหมดไปยังcommon
แล้ว และตอนนี้เข้ากันได้กับ jvm และ iOS นอกเหนือจาก Android แล้วpaging-testing
ได้ย้ายโค้ดไปยังcommon
แล้ว และตอนนี้เข้ากันได้กับ jvm และ iOS นอกเหนือจาก Androidpaging-compose
ได้ย้ายโค้ดไปยังcommon
และจัดส่งอาร์ติแฟกต์ของ Android ซึ่งตรงกับการรองรับหลายแพลตฟอร์มของandroidx.compose
paging-runtime
,paging-guava
,paging-rxjava2
และpaging-rxjava3
จะยังคงใช้สำหรับ Android เท่านั้น
การเปลี่ยนแปลง API
- อินเทอร์เฟซ Logger สาธารณะที่มีไว้สำหรับการใช้งานภายในเท่านั้นเลิกใช้งานแล้ว (I16e95, b/288623117)
การสนับสนุนภายนอก
- ขอขอบคุณ veyndan จาก Cash App App ที่ ซึ่งได้ช่วยย้ายหน้าเปลี่ยนหน้าไปยัง Kotlin Multiplatform ได้ (#560, #561, #560, #561, #562, #561, #562, #573, #576, #577, #577, #578, #578, #578
เวอร์ชัน 3.3.0-alpha01
20 กันยายน 2023
- นี่เป็นการเปิดตัวไลบรารี androidx.paging ในหลายแพลตฟอร์มครั้งแรก เวอร์ชันนี้มีอาร์ติแฟกต์
*-jvm
และ*-android
เท่านั้น สำหรับตัวแปร macOS, iOS และ Linux ให้ใช้3.3.0-alpha02
เวอร์ชัน 3.2
เวอร์ชัน 3.2.1
6 กันยายน 2023
ปล่อย androidx.paging:paging-*:3.2.1
แล้ว เวอร์ชัน 3.2.1 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่
asSnapshot()
API ของอาร์ติแฟกต์การทดสอบการแบ่งหน้าค้างเมื่อผ่านโฟลว์ที่สร้างขึ้นโดยใช้PagingData.from(List)
เนื่องจากasSnapshot()
ไม่มีข้อมูลใดๆ เมื่อโหลดเสร็จสิ้น (ต่างจากการโอเวอร์โหลดPagingData.from(List, LoadStates)
) วิธีแก้ปัญหาเบื้องต้นนี้ใช้ได้กับโฟลว์ที่เสร็จสมบูรณ์เท่านั้น (เช่นflowOf(PagingData.from(...))
) สําหรับโฟลว์ที่ไม่สมบูรณ์ (เช่นMutableStateFlow
ใช้โอเวอร์โหลดPagingData.from
ที่ให้LoadStates
) (I502c3) - ขณะนี้การเขียนหน้าเขียนจะใช้
AndroidUiDispatcher.Main
เป็นการภายในเพื่อให้แน่ใจว่าข้อมูลใหม่จะอยู่ในเฟรมเดียวกับการโหลดเสร็จสมบูรณ์ (Ia55af)
เวอร์ชัน 3.2.0
26 กรกฎาคม 2023
ปล่อย androidx.paging:paging-*:3.2.0
แล้ว เวอร์ชัน 3.2.0 มีคอมมิตเหล่านี้
การเปลี่ยนแปลงที่สำคัญตั้งแต่ 3.1.0
- Paging Compose มีความเสถียรของ API แล้ว และได้รับการรวมกลับเข้ากับส่วนอื่นของ Paging ซึ่งขณะนี้เวอร์ชันสามารถจับคู่กับอาร์ติแฟกต์ของ Paging อื่นๆ ทั้งหมด การเปลี่ยนแปลงที่มีมาตั้งแต่ 3.1.0 ประกอบด้วย
- รองรับการแสดงตัวอย่างรายการข้อมูลปลอมด้วยการสร้าง
PagingData.from(fakeData)
และรวมPagingData
นั้นไว้ในMutableStateFlow
(เช่นMutableStateFlow(PagingData.from(listOf(1, 2, 3)))
) ส่งต่อขั้นตอนนี้ไปยัง Composable@Preview
เป็นรีซีฟเวอร์เพื่อให้collectAsLazyPagingItems()
แสดงตัวอย่าง - รองรับเลย์เอาต์แบบ Lazy Loading ทั้งหมด เช่น
LazyVerticalGrid
และHorizontalPager
รวมถึงคอมโพเนนต์แบบ Lazy ที่กำหนดเองจากไลบรารี Wear และ TV โดยทำได้ผ่านเมธอดส่วนขยายitemKey
และitemContentType
ระดับที่ต่ำกว่าใหม่ ซึ่งช่วยให้คุณนำพารามิเตอร์key
และcontentType
ไปใช้กับ API มาตรฐานitems
ที่มีอยู่แล้วสำหรับLazyColumn
,LazyVerticalGrid
รวมถึง API ที่เทียบเท่าใน API เช่นHorizontalPager
อยู่แล้วLazyPagingItems
- เลิกใช้งาน
items(lazyPagingItems)
และitemsIndexed(lazyPagingItems)
ที่รองรับเฉพาะLazyListScope
แล้ว
- รองรับการแสดงตัวอย่างรายการข้อมูลปลอมด้วยการสร้าง
- อาร์ติแฟกต์
paging-testing
ใหม่ซึ่งมี API ที่ออกแบบโดยการทดสอบ 1 หน่วยของแอปแต่ละเลเยอร์และการผสานรวมกับการแบ่งหน้าโดยแยกออกมาต่างหาก ตัวอย่างเช่น มีTestPager
ที่ให้คุณตรวจสอบลักษณะการทำงานของการติดตั้งใช้งานPagingSource
ที่กำหนดเองอย่างอิสระจากเพจเจอร์และ UI จริงasPagingSourceFactory
API ที่เปลี่ยนรูปแบบFlow<List<Value>>
หรือList<Value>
แบบคงที่ให้เป็นPagingSourceFactory
ที่ส่งไปยังเพจเจอร์ในระหว่างการทดสอบได้asSnapshot
ส่วนขยาย Kotlin ในFlow<PagingData<Value>>
ซึ่งแปลFlow<PagingData<Value>>
เป็นList<Value>
โดยตรงasSnapshot lambda
ช่วยให้คุณเลียนแบบ UI ของแอปผ่าน API เช่นscrollTo
หรือappendScrollWhile
ได้ เพื่อให้คุณตรวจสอบได้ว่าภาพรวมของข้อมูลถูกต้อง ณ จุดใดก็ตามในชุดข้อมูลที่แบ่งหน้า
- เพิ่มบันทึกเริ่มต้นเพื่อแสดงข้อมูลการแก้ไขข้อบกพร่องของการแบ่งหน้าใน 2 ระดับ:
VERBOSE
และDEBUG
เปิดใช้บันทึกได้ผ่านคำสั่งadb shell setprop log.tag.Paging [DEBUG|VERBOSE]
ซึ่งจะมีผลกับทั้งการแบ่งหน้าที่มีข้อมูลพร็อพเพอร์ตี้หรือการแบ่งหน้าที่มีการเขียน - เพิ่มตัวสร้างสำหรับ
PagingDataAdapter
และAsyncPagingDataDiffer
ซึ่งยอมรับCoroutineContext
แทนCoroutineDispatcher
- เพิ่มอินเทอร์เฟซการทำงานใหม่ของ
PagingSourceFactory
ที่มี Surfaces API ที่ชัดเจนกว่า () -> ก่อนหน้านี้PagingSource
แลมบ์ดา โรงงานนี้สามารถใช้ในการสร้างเพจเจอร์ได้
เวอร์ชัน 3.2.0-rc01
21 มิถุนายน 2023
ปล่อย androidx.paging:paging-*:3.2.0-rc01
แล้ว เวอร์ชัน 3.2.0-rc01 มีคอมมิตเหล่านี้
การสนับสนุนภายนอก
- ขอขอบคุณ Veyndan ที่มีส่วนร่วมในการย้าย Paging ออกจากฟีเจอร์เฉพาะ Android/JVM (#553, #554, #555, #559)
เวอร์ชัน 3.2.0-beta01
7 มิถุนายน 2023
ปล่อย androidx.paging:paging-*:3.2.0-beta01
แล้ว เวอร์ชัน 3.2.0-beta01 มีการคอมมิตเหล่านี้
การเขียนการแบ่งหน้า
- Paging Compose มีความเสถียรของ API อย่างเป็นทางการแล้ว ด้วยเหตุนี้ เวอร์ชันจึงได้รับการอัปเดตจาก
1.0.0-alpha20
ให้ตรงกับเวอร์ชันของอาร์ติแฟกต์การสร้างหน้าอื่นๆ ทั้งหมด
การเปลี่ยนแปลง API
- นำ API
items(LazyPagingItems)
และitemsIndexed(LazyPagingItems)
ที่เลิกใช้งานแล้วออกจาก Paging Compose โปรดดูบันทึกประจำรุ่นของ1.0.0-alpha20
สำหรับการเขียนหน้าเพื่อดูตัวอย่าง API ทดแทน (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) - เพิ่ม API ใหม่ของ
List<Value>.asPagingSourceFactory()
สำหรับpaging-testing
เพื่อรับPagingSourceFactory
ที่โหลดจากรายการข้อมูลที่เปลี่ยนแปลงไม่ได้เท่านั้น ควรใช้ส่วนขยายที่มีอยู่ในFlow<List<Value>>
สำหรับการทดสอบกับข้อมูลแบบคงที่ที่มีหลายรุ่น (Id34d1, b/280655188)
การเปลี่ยนแปลง API
- ตอนนี้ API สาธารณะทั้งหมดในการทดสอบการแบ่งหน้าจะมีคำอธิบายประกอบด้วย
@VisibleForTesting
เพื่อดูแลให้มีการใช้ API เหล่านี้ในการทดสอบเท่านั้น (I7db6e) asSnapshot
API ไม่จำเป็นต้องส่งในCoroutineScope
อีกต่อไป ค่าเริ่มต้นจะเป็นการใช้บริบทที่รับช่วงมาจากขอบเขตระดับบน (Id0a78, b/282240990)- พารามิเตอร์ตัวสร้าง
TestPager
เรียงลำดับใหม่เพื่อให้ตรงกับลำดับของพารามิเตอร์ตัวสร้างPager
จริง (I6185a) - ย้ายข้อมูลการใช้ lambda ประเภท
() -> PagingSource<Key, Value>
ของการทดสอบการแบ่งหน้าเป็นประเภทPagingSourceFactory<Key, Value>
แล้ว (I4a950, b/280655188)
การเปลี่ยนแปลงลักษณะการทำงาน
- ผู้มอบหมายงานหลักไม่จำเป็นต้องเรียกใช้การทดสอบการแบ่งหน้าของ
asSnapshot
อีกต่อไป การตั้งค่าจะไม่เปลี่ยนแปลงลักษณะการทำงานทดสอบอีกต่อไป (Ie56ea)
เวอร์ชัน 3.2.0-alpha05
3 พฤษภาคม 2023
ปล่อย androidx.paging:paging-*:3.2.0-alpha05
แล้ว เวอร์ชัน 3.2.0-alpha05 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- ตอนนี้ Paging Testing API ของ
asSnapshot
ตั้งค่าเริ่มต้นพารามิเตอร์loadOperations
เป็น lambda ที่ว่างเปล่า การดำเนินการนี้ช่วยให้เรียกใช้asSnapshot
โดยไม่ต้องผ่านการดำเนินการโหลดใดๆ เพื่อดึงข้อมูลจากการโหลดการรีเฟรชเริ่มต้น (Ied354, b/277233770)
การปรับปรุงเอกสาร
- อัปเดตเอกสารเมื่อวันที่
asPagingSourceFactory()
เพื่อชี้แจงว่านี่เป็นเมธอดส่วนขยายในFlow
ซึ่งส่งคืนโรงงานที่นำมาใช้ใหม่ได้สำหรับการสร้างอินสแตนซ์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>>
ที่จะส่งไปยังเพจเจอร์List<Value>>
แต่ละรายการที่ปล่อยออกจากโฟลว์แสดงถึงการสร้างข้อมูลที่มีการแบ่งหน้า ซึ่งช่วยอำนวยความสะดวกในการทดสอบการแบ่งหน้าในการเปลี่ยนรูปแบบPagingData
โดยการปลอมแปลงแหล่งข้อมูลเพื่อให้เพจเจอร์รวบรวมไว้ (I6f230, b/235528239) ระบบได้ขยายอาร์ติแฟกต์
paging-testing
ด้วย API ใหม่ที่เหมาะสำหรับการยืนยันข้อมูลที่มีFlow<PagingData<T>>
นั้นถูกต้อง ซึ่งนำไปใช้ได้ เช่น เพื่อยืนยันเอาต์พุตของFlow<PagingData<T>>
จากเลเยอร์ ViewModel ของคุณซึ่งทำผ่านส่วนขยาย Kotlin
asSnapshot
ในFlow<PagingData<Value>>
ซึ่งจะแปลFlow<PagingData<Value>>
เป็นList<Value>
โดยตรง lambdaasSnapshot
ให้คุณเลียนแบบ 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, Ib29b9, Ib29b, I16}
การเปลี่ยนแปลง 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 ที่ออกแบบมาเพื่อทดสอบหน่วยการทดสอบแต่ละเลเยอร์ของแอปและการผสานรวมกับการแบ่งหน้าโดยแยกออกจากกัน
ตัวอย่างเช่น รุ่นแรกนี้มีคลาส TestPager
ซึ่งให้คุณตรวจสอบลักษณะการทำงานของการติดตั้งใช้งาน PagingSource
ที่กำหนดเองอย่างอิสระจาก Pager
และ UI จริง ตามปกติแล้วคุณจะต้องจำลองการผสานรวมการแบ่งหน้าจากต้นทางถึงปลายทาง
TestPager
ควรถือเป็นตัวปลอม - สองเท่าของการทดสอบที่สะท้อนให้เห็นการใช้งาน Pager
จริง ขณะเดียวกันก็ให้แพลตฟอร์ม API ที่ง่ายขึ้นสำหรับการทดสอบ PagingSource
API เหล่านี้เป็น API ของ suspend
และควรทํางานภายใน 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 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ขณะนี้การแบ่งหน้าจะสร้างบันทึกผ่านคลาส
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
- API ของ
Flow<PagingData>.observable
และFlow<PagingData>.flowable
ไม่ได้เป็นการทดลองอีกต่อไป - การเปลี่ยนแปลงลักษณะการทำงานของ
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() ในกรณีที่มีการส่งเหตุการณ์โหลดหลายรายการผ่านการสร้างหน้าดาวน์สตรีมขณะที่ไม่มีผู้สังเกตการณ์หรือระหว่างที่ผู้สังเกตการณ์กำลังเปลี่ยนไปใช้ PagingData ใหม่ (Ib682e)
เวอร์ชัน 3.1.0-beta01
13 ตุลาคม 2021
ปล่อย androidx.paging:paging-*:3.1.0-beta01
แล้ว เวอร์ชัน 3.1.0-beta01 มีการคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่การเข้าถึงรายการอย่างรวดเร็วจำนวนมากอาจทำให้รายการดังกล่าวหลุดจากการพิจารณาใน prefetchDistance ทำให้การโหลดหน้าเว็บหยุดชะงัก โดยเฉพาะอย่างยิ่งปัญหาที่มีการจัดวางหลายรายการพร้อมกันตามลำดับที่ให้ความสำคัญกับการโหลดตามทิศทางการเลื่อนของผู้ใช้ ตอนนี้การเข้าถึงรายการเหล่านี้จะได้รับการบัฟเฟอร์และจัดลําดับความสําคัญพร้อมกันเพื่อป้องกันไม่ให้การเข้าถึงรายการลดลง (aosp/1833273)
เวอร์ชัน 3.1.0-alpha04
29 กันยายน 2021
ปล่อย androidx.paging:paging-*:3.1.0-alpha04
แล้ว เวอร์ชัน 3.1.0-alpha04 จะมีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
Flow<PagingData>.observable
และFlow<PagingData>.flowable
API ไม่มีอยู่ในการทดลองแล้ว (Ie0bdd)
แก้ไขข้อบกพร่อง
- สำหรับ LoadStates ปัจจุบัน
endOfPaginationReached
จะเป็นfalse
เสมอ เป็นเวลาLoadType.REFRESH
ก่อนหน้านี้ มีความเป็นไปได้สำหรับ endOfPaginationReach เปลี่ยนเป็นtrue
สำหรับ RemoteMediatorREFRESH
แล้ว แต่ไม่ใช่ สำหรับ PagingSource ตอนนี้ลักษณะการทำงานนี้รวมเพื่อให้ส่งคืนได้เสมอfalse
เนื่องจาก REFRESH จะเป็นเทอร์มินัลไม่ได้ และตอนนี้ก็ ได้รับการบันทึกไว้ว่าเป็นส่วนหนึ่งของสัญญา API ใน LoadStates เมื่อตัดสินใจว่า การแบ่งหน้าถูกสิ้นสุดการใช้งานแล้ว คุณควรทําเสมอในส่วน ขอเส้นทาง "APPEND" หรือ "PREPEND" อย่างใดอย่างหนึ่ง (I047b6) ตอนนี้ LoadStates จาก Paging กำลังรอค่าที่ถูกต้องจากทั้ง 2 เวอร์ชัน PagingSource และ RemoteMediator ก่อนปล่อยสตรีมระหว่าง หลายชั่วอายุคน ซึ่งจะป้องกันไม่ให้ PagingData รุ่นใหม่ส่ง NotLoading ใน MergedLoadStates.source.refresh หากมีอยู่แล้ว กำลังโหลด ตอนนี้ PagingData รุ่นใหม่จะเริ่มต้นอย่างถูกต้องเสมอ มี "กำลังโหลด" สำหรับสถานะการรีเฟรชแทนการรีเซ็ตเป็น "ไม่โหลด" ครั้งแรก ไม่ถูกต้องในบางกรณี
การยกเลิกในรุ่นที่ผ่านมานี้เกิดขึ้นอย่างใจจดใจจ่อเมื่อเกิดข้อผิดพลาด / คนรุ่นใหม่ ไม่จำเป็นต้องใช้ .collectLatest แล้ว ใน
Flow<PagingData>
อย่างไรก็ตาม เรายังคงแนะนำให้ทำเช่นนั้น (I0b2b5, b/177351336, b/195028524).loadStateFlow
และ.addLoadStateListener
ใน API ของผู้นำเสนอ ไม่ส่งCombinedLoadStates
เริ่มต้นแบบซ้ำซ้อนอีกต่อไป ตั้งค่าสถานะสื่อกลางเป็นnull
และตั้งค่าสถานะแหล่งที่มาเป็นNotLoading(endOfPaginationReached = false)
ซึ่งหมายความว่า- ระบบจะระบุสถานะของสื่อกลางไว้เสมอหากคุณใช้ RemoteMediator
- การลงทะเบียน Listener ของloadState ใหม่หรือผู้รวบรวมใหม่ใน
.loadStateFlow
จะไม่ปล่อยค่าปัจจุบันทันทีอีกต่อไป หากยังไม่ได้รับCombinedLoadStates
จริงจากPagingData
กรณีนี้อาจเกิดขึ้นหากนักรวบรวมหรือผู้ฟังเริ่มขึ้น ก่อนที่จะส่งPagingData
(I1a748)
เวอร์ชัน 3.1.0-alpha03
21 กรกฎาคม 2021
ปล่อย androidx.paging:paging-*:3.1.0-alpha03
แล้ว เวอร์ชัน 3.1.0-alpha03 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
เพิ่มการแสดงผล LoadResult ประเภทที่ 3 Loadผลลัพธ์.ไม่ถูกต้อง ลงใน PagingSource เมื่อ PagingSource.load แสดงผล Loadผลลัพธ์.ไม่ถูกต้อง การแบ่งหน้าจะทิ้งข้อมูลที่โหลดและ ทำให้ PagingSource ใช้งานไม่ได้ ประเภทการแสดงผลนี้ออกแบบมาเพื่อ จัดการข้อมูลที่อาจไม่ถูกต้องหรือไม่อัปเดตซึ่งส่งคืนได้ จากฐานข้อมูลหรือเครือข่าย
ตัวอย่างเช่น หากฐานข้อมูลที่สำคัญถูกเขียนลงใน PagingSource ไม่ทํางานในเวลาที่กำหนด ระบบอาจแสดงผล ผลลัพธ์ที่ไม่สอดคล้องกันหากการใช้งานขึ้นอยู่กับ ความไม่เปลี่ยนแปลงของชุดข้อมูลที่รองรับซึ่งโหลดมา (เช่น LIMIT การใช้ db รูปแบบ OFFSET) ในสถานการณ์นี้ แนะนำให้ตรวจสอบการเป็นโมฆะหลังจากการโหลด และ แสดงผล Loadผลลัพธ์.ไม่ถูกต้อง ซึ่งทำให้การแบ่งหน้าทิ้ง คำขอโหลดที่รอดำเนินการหรือคำขอโหลดในอนาคตไปยัง PagingSource นี้และ ทำให้เป็นโมฆะ
Paging2 API รองรับผลตอบแทนประเภทนี้ที่ใช้ประโยชน์จาก LivePagedList หรือ RxPagedList เมื่อใช้ PagingSource กับ PagedList API ของ Paging2 ระบบจะปลด PagedList ออกทันที การหยุดโหลดข้อมูลใน PagedList อีกและ จะทำให้เกิดการใช้งานไม่ได้ใน PagingSource
LoadResult คือคลาสแบบปิดผนึก ซึ่งหมายความว่านี่คือ การเปลี่ยนแปลงที่ใช้ไม่ได้กับแหล่งที่มาที่ใช้ Use Case โดยตรง ผลลัพธ์ของ PagingSource.load จะต้องจัดการกับ Loadผลลัพธ์.เกิดปัญหากับ ในเวลาคอมไพล์ ตัวอย่างเช่น ผู้ใช้ Kotlin ใช้ประโยชน์จาก อย่างละเอียดถี่ถ้วนว่าประเภทการคืนสินค้าจะต้องเพิ่มการตรวจสอบเมื่อใด สำหรับประเภทที่ไม่ถูกต้อง (Id6bd3, b/191806126, b/192013267)
แก้ไขข้อบกพร่อง
- เพิ่ม Callback ของการเสียสถานะผ่าน PratingSource.registerไม่ถูกต้องCallback หรือ ตอนนี้ DataSource.addInvalidatedCallback จะทริกเกอร์โดยอัตโนมัติหาก ลงทะเบียนใน PagingSource / DataSource แล้ว ไม่ถูกต้อง วิธีนี้จะช่วยแก้ไขเงื่อนไขด้านเชื้อชาติที่ทำให้การแบ่งหน้าลดลง ทำให้ใช้งานไม่ได้และติดขัดเมื่อให้แหล่งที่มาที่ ไม่ถูกต้องระหว่างการโหลดครั้งแรก นอกจากนี้ ให้เลิกใช้ ตอนนี้ระบบนำ Callback ออกอย่างถูกต้องหลังจากทริกเกอร์ตาม ได้รับการรับประกันว่าจะได้รับการโทร 1 ครั้ง (I27e69)
- การส่งค่าเริ่มต้นของตัวยึดตำแหน่ง (InitialPagedList) จากสตรีม PagedList ที่เพิ่งสร้างใหม่ เช่น LivePagedListBuilder หรือ RxPagedListBuilder จะไม่ล้างข้อมูลที่โหลดไว้ก่อนหน้านี้อีกต่อไป
เวอร์ชัน 3.1.0-alpha02
1 กรกฎาคม 2021
ปล่อย androidx.paging:paging-*:3.1.0-alpha02
แล้ว เวอร์ชัน 3.1.0-alpha02 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
เพิ่ม onPagesDisplayed Listener และ API ผู้นำเสนอโฟลว์ ซึ่งจะทริกเกอร์ทันทีหลังจากหน้านำเสนอ มีการอัปเดตใน UI
เนื่องจากการอัปเดตเหล่านี้ทำงานพร้อมกันกับ UI คุณจึงเรียกใช้เมธอดของอะแดปเตอร์ได้ เช่น .snapshot, .getItemCount เพื่อตรวจสอบสถานะหลังจาก นำการอัปเดตไปใช้แล้ว โปรดทราบว่า .snapshot() ถูกทิ้งไว้ อย่างโจ่งแจ้ง เนื่องจากการอัปเดตแต่ละครั้งอาจมีค่าใช้จ่ายสูง
การอัปเดตหน้าเว็บอาจเกิดขึ้นในสถานการณ์ต่อไปนี้
- การโหลดเริ่มต้นของ PagingData รุ่นใหม่เสร็จสมบูรณ์ ไม่ว่าคนรุ่นใหม่จะมีการเปลี่ยนแปลง รายการที่นำเสนอ นั่นคือ แอปรุ่นใหม่ที่ดำเนินการโหลดเริ่มต้นเสร็จสมบูรณ์ ไม่มีการอัปเดต เนื่องจากรายการเหมือนเดิมทุกประการ เรียกใช้ Callback นี้
- มีการแทรกหน้าเว็บ แม้ว่าหน้าที่แทรกจะไม่มีหน้า รายการ
- หน้าเว็บจะหายไป แม้ว่าหน้าที่วางจะว่างเปล่าก็ตาม (I272c9, b/189999634)
แก้ไขข้อบกพร่อง
- การเข้าถึง PagedList.dataSource จากค่าเริ่มต้นที่สร้างขึ้น โดย LivePagedList หรือ RxPagedList จะไม่ส่งข้อผิดพลาด IllegalStateException (I96707)
เวอร์ชัน 3.1.0-alpha01
2 มิถุนายน 2021
ปล่อย androidx.paging:paging-*:3.1.0-alpha01
แล้ว เวอร์ชัน 3.1.0-alpha01 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- ชั้นเรียนที่
paging-rxjava3
จัดอยู่ในตอนนี้androidx.paging.rxjava3
แพ็กเกจเพื่อไม่ให้ขัดแย้งกับpaging-rxjava2
(Ifa7f6)
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่บางครั้งการแบ่งหน้าจะไม่ส่งการดำเนินการแตกต่างกัน เหตุการณ์ใน RecyclerView ซึ่งอาจทำให้ Listener บางเหตุการณ์ทริกเกอร์ ตั้งแต่เนิ่นๆ (Ic507f, b/182510751)
การสนับสนุนภายนอก
- เพิ่ม PagedList Compat API ที่เลิกใช้งานแล้วไปยังอาร์ติแฟกต์ 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 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้การสร้างหน้าเขียนรองรับการแสดงตัวอย่างรายการข้อมูลปลอมด้วยการสร้าง
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 Loading ทั้งหมด
ก่อนหน้านี้ Paging Compose มีส่วนขยาย items
และ itemsIndexed
ที่กําหนดเองใน LazyListScope
ซึ่งหมายความว่าคุณไม่สามารถใช้ Paging Compose กับเลย์เอาต์ Lazy Loading อื่นๆ เช่น LazyVerticalGrid
, HorizontalPager
หรือคอมโพเนนต์ Lazy Loading ที่กำหนดเองอื่นๆ ที่ไลบรารี Wear และ TV มีให้ การแก้ไขปัญหาความไม่ยืดหยุ่นนี้ถือเป็นการอัปเดตหลักของรุ่นนี้
เพื่อรองรับเลย์เอาต์แบบ Lazy Loading ได้มากขึ้น เราต้องสร้าง API ไว้ที่เลเยอร์อื่น แทนการมอบ API items
ที่กําหนดเองสําหรับเลย์เอาต์แบบ Lazy Loading แต่ละเลย์เอาต์ ขณะนี้ Paging Compose มีวิธีขยายระดับที่ต่ำลงเล็กน้อยสําหรับ LazyPagingItems
ใน itemKey
และ itemContentType
API เหล่านี้มุ่งเน้นที่จะช่วยคุณในการใช้พารามิเตอร์ key
และ contentType
กับ API มาตรฐาน items
ที่มีอยู่แล้วสำหรับ LazyColumn
, LazyVerticalGrid
รวมถึง API ที่เทียบเท่าใน 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 Loading ทั้งหมดเป็นปัจจัยสำคัญสำหรับผู้ใช้ที่ใช้การเขียนหน้าเพจนับจากนี้ไป ด้วยเหตุนี้ ระบบจึงเลิกใช้งานส่วนขยายที่มีอยู่ไปยัง LazyListScope
(I0c459, I92c8f, b/276989796)
การเปลี่ยนแปลง API
- เพื่อให้การย้ายข้อมูลไปยัง API ใหม่ง่ายขึ้น ตอนนี้ฟังก์ชันส่วนขยาย
items
และitemsIndexed
ในLazyListScope
รองรับพารามิเตอร์contentType
แล้ว ซึ่งมิเรอร์การรองรับใน API ใหม่ (Ib1918, b/255283378)
การอัปเดตการขึ้นต่อกัน
- การสร้างหน้าเพจได้อัปเดตทรัพยากร Dependency จาก Compose 1.0.5 เป็น Compose 1.2.1 แล้ว (Ib1918, b/255283378)
เวอร์ชัน 1.0.0-alpha18
8 กุมภาพันธ์ 2023
เผยแพร่ androidx.paging:paging-compose:1.0.0-alpha18
แล้วโดยไม่มีการเปลี่ยนแปลง เวอร์ชัน 1.0.0-alpha18 มีคอมมิตเหล่านี้
เวอร์ชัน 1.0.0-alpha17
24 ตุลาคม 2022
ปล่อย androidx.paging:paging-compose:1.0.0-alpha17
แล้ว เวอร์ชัน 1.0.0-alpha17 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- เพิ่มการรองรับ
CoroutineContext
ที่กำหนดเองเมื่อโทรหาcollectLazyPagingItems
(I7a574, b/243182795, b/233783862)
เวอร์ชัน 1.0.0-alpha16
10 สิงหาคม 2022
ปล่อย androidx.paging:paging-compose:1.0.0-alpha16
แล้ว เวอร์ชัน 1.0.0-alpha16 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ขณะนี้การแบ่งหน้าจะสร้างบันทึกผ่านคลาส
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 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- LazyPagingItems ตอนนี้ itemCount และ item Getter สามารถสังเกตได้ ซึ่งช่วยให้ใช้กับ LazyVerticalGrid ได้เช่นกัน (Ie2446, b/171872064, b/168285687)
ความเข้ากันได้กับการเขียน
androidx.paging:paging-compose:1.0.0-alpha09
ใช้งานร่วมกับ Compose เวอร์ชัน1.0.0-beta07
ขึ้นไปเท่านั้น
เวอร์ชัน 1.0.0-alpha08
24 กุมภาพันธ์ 2021
ปล่อย androidx.paging:paging-compose:1.0.0-alpha08
แล้ว เวอร์ชัน 1.0.0-alpha08 มีคอมมิตเหล่านี้
อัปเดตเพื่อผสานรวมกับ Compose 1.0.0-beta01
เวอร์ชัน 1.0.0-alpha07
10 กุมภาพันธ์ 2021
ปล่อย androidx.paging:paging-compose:1.0.0-alpha07
แล้ว เวอร์ชัน 1.0.0-alpha07 มีคอมมิตเหล่านี้
อัปเดตเพื่อผสานรวมกับ Compose เวอร์ชัน 12 แล้ว
เวอร์ชัน 1.0.0-alpha06
28 มกราคม 2021
ปล่อย androidx.paging:paging-compose:1.0.0-alpha06
แล้ว เวอร์ชัน 1.0.0-alpha06 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
อัปเดตเพื่อใช้ Compose 1.0.0-alpha11
เวอร์ชัน 1.0.0-alpha05
13 มกราคม 2021
ปล่อย androidx.paging:paging-compose:1.0.0-alpha05
แล้ว เวอร์ชัน 1.0.0-alpha05 มีคอมมิตเหล่านี้
อัปเดตเพื่อใช้ Compose 1.0.0-alpha10 แล้ว
เวอร์ชัน 1.0.0-alpha04
16 ธันวาคม 2020
ปล่อย androidx.paging:paging-compose:1.0.0-alpha04
แล้ว เวอร์ชัน 1.0.0-alpha04 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- อัปเดตคุณสมบัติด้านความสะดวก
CombinedLoadStates.refresh
CombinedLoadStates.prepend
CombinedLoadStates.append
เพื่อเปลี่ยนจากLoading
เป็นNotLoading
เท่านั้น หลังจากสถานะการโหลดของสื่อกลางและแหล่งที่มาเป็นNotLoading
เพื่อให้แน่ใจว่า นำการอัปเดตระยะไกลไปใช้แล้ว (I65619)
เวอร์ชัน 1.0.0-alpha03
2 ธันวาคม 2020
ปล่อย androidx.paging:paging-compose:1.0.0-alpha03
แล้ว เวอร์ชัน 1.0.0-alpha03 มีคอมมิตเหล่านี้
- อัปเดตให้ตรงกับ Compose 1.0.0-alpha08 แล้ว
เวอร์ชัน 1.0.0-alpha02
11 พฤศจิกายน 2020
ปล่อย androidx.paging:paging-compose:1.0.0-alpha02
แล้ว เวอร์ชัน 1.0.0-alpha02 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- เพิ่มเมธอด
.peek()
,.snapshot()
,.retry()
และ.refresh()
ลงในLazyPagingItem
ที่แสดงฟังก์ชันการทำงานเดียวกับที่มีในAsyncPagingDataDiffer
/PagingDataAdapter
(Iddfe8, b/172041660)
เวอร์ชัน 1.0.0-alpha01
28 ตุลาคม 2020
ปล่อย androidx.paging:paging-compose:1.0.0-alpha01
แล้ว เวอร์ชัน 1.0.0-alpha01 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
อาร์ติแฟกต์ paging-compose
มีการผสานรวมระหว่าง The 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 ได้เลิกใช้งานไปเพื่อใช้ API ของ Paging 3 ใหม่ ซึ่งมีการปรับปรุงต่อไปนี้
- การรองรับชั้นหนึ่งสำหรับโครูทีน Kotlin และ Flow
- การสนับสนุนสำหรับการยกเลิก
- สัญญาณสถานะโหลดและข้อผิดพลาดในตัว
- ฟังก์ชันลองใหม่ + รีเฟรช
- คลาสย่อยของแหล่งข้อมูลทั้ง 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
จนครบและทำให้หน้า "ติดอยู่"
เวอร์ชัน 3.0.0-beta01
10 กุมภาพันธ์ 2021
ปล่อย androidx.paging:paging-*:3.0.0-beta01
แล้ว เวอร์ชัน 3.0.0-beta01 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- ตอนนี้ Rx2 และ Rx3 Wrapper จะแสดงคำอธิบายประกอบทดลอง
แล้วแต่กรณี หากคุณใช้ Rx compat Wrapper ใน paging-rxjava2 หรือ
paging-rxjava3 คุณจะต้องใส่คำอธิบายประกอบการใช้งานด้วย
@OptIn(ExperimentalCoroutinesApi::class)
(Ib1f9d)
แก้ไขข้อบกพร่อง
- แก้ไข
IndexOutOfBoundsException: Inconsistency detected
เป็นบางครั้งเมื่อใช้ API ของDataSource
v2 ผ่านเส้นทางความเข้ากันได้ - ตอนนี้การเรียกใช้
isInvalid
ในระหว่างการเริ่มต้นDataSource
เมื่อใช้ผ่านเส้นทางความเข้ากันได้มีการเรียกใช้อย่างถูกต้องใน FetchDispatcher แทนเทรดหลัก การดำเนินการนี้เป็นการแก้ไขIllegalStateException
เนื่องจากการเข้าถึงฐานข้อมูลในเทรดหลักเมื่อใช้การใช้งานPagingSource
ของห้องแชท
เวอร์ชัน 3.0.0-alpha13
27 มกราคม 2021
ปล่อย androidx.paging:paging-*:3.0.0-alpha13
แล้ว เวอร์ชัน 3.0.0-alpha13 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
PagingSource.getRefreshKey
ไม่จำเป็นต้องติดตั้งใช้งานอีกต่อไป ตอนนี้เป็นฟังก์ชัน Abstract โดยไม่ต้องมีการติดตั้งใช้งานเริ่มต้น การย้ายข้อมูลผู้ใช้อาจเลือกใช้ค่าเริ่มต้นต่อไป ซึ่งแสดงผลเพียงnull
แต่กลับgetRefreshKey()
ควรมีการใช้งานจริงที่ส่งคืนคีย์ตาม ตำแหน่งการเลื่อนปัจจุบันที่ทำให้การแบ่งหน้าสามารถโหลดต่อไปได้ ตรงกลางของวิวพอร์ตผ่านPagingState.anchorPosition
หาก เท่าที่จะเป็นไปได้ (I4339a)InvalidatingPagingSourceFactory
เป็นคลาสสุดท้ายแล้ว (Ia3b0a)- อนุญาตให้กำหนดค่าตัวคั่นเทอร์มินัล (ส่วนหัว / ส่วนท้าย)
ที่มีพารามิเตอร์ SeparatorType เพิ่มเติมที่ไม่บังคับ สอง
ได้แก่
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
- LegalatingPagingSourceแฟกตอรี่ ไม่ใช่คลาส abstract อีกต่อไป เนื่องจากไม่เคยมีวิธีใดๆ ในนามธรรมเลย (I4a8c4)
- เพิ่ม .cachedIn() โอเวอร์โหลดที่ยอมรับ ViewModel แทน Lifecycle หรือ CoroutineScope สำหรับผู้ใช้ Java (I97d81, b/175332619)
- อนุญาตให้ผู้โทร Java ใช้การดำเนินการเปลี่ยนรูปแบบ PagingData ใน
แบบไม่พร้อมกัน โดยการรับผู้ดำเนินการเป็นโอเปอเรเตอร์การแปลง
อาร์กิวเมนต์ โอเปอเรเตอร์การแปลง -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 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- เพิ่มการรองรับสถานะที่บันทึกไว้สําหรับ Use Case พื้นฐานต่อไปนี้ (การสนับสนุนเต็มรูปแบบ โดยเฉพาะในกรณีของแหล่งที่มาแบบเลเยอร์ยังอยู่ระหว่างดำเนินการ)
- มีการแคชโฟลว์และแอปพลิเคชันไม่ได้หยุดทำงาน (เช่น ระบบได้แคชโฟลว์ในโมเดลข้อมูลพร็อพเพอร์ตี้และกิจกรรมสร้างขึ้นใหม่ในกระบวนการ)
- ระบบจะนับแหล่งที่มาของการแบ่งหน้า มีการเปิดใช้ตัวยึดตำแหน่งและเลย์เอาต์ ไม่ส่าย
การเปลี่ยนแปลง API
PagingSource.getRefreshKey()
เป็น API ที่มีความเสถียรแล้ว (I22f6f, b/173530980)PagingSource.invalidate
ไม่ใช่ฟังก์ชันแบบเปิดอีกต่อไป หากคุณ ต้องได้รับการแจ้งเตือนเมื่อเกิดการใช้งานไม่ได้ โปรดพิจารณาเรียกใช้ RegisteratedCallback method แทนที่จะเป็นการลบล้าง เป็นโมฆะ (I628d9, b/173029013, b/137971356)- ขณะนี้เพจเจอร์มีตัวสร้างทดลองเพียงตัวเดียวควบคู่ไปกับ ถาวร โดยไม่ทำให้ 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
หากคุณกำลังทดสอบแหล่งข้อมูล Paging2 โดยไม่ใช้ Pager หรือ PagedList,
pageSize
อาจไม่ตรงกับPagingConfig.pageSize
หาก คุณกำลังตั้งค่าinitialLoadSize
ด้วย ถ้ามีความสำคัญต่อ ให้ลองใช้ Pager/PagedList แทน ซึ่งจะตั้งค่าเป็นการภายใน ขนาดหน้าที่ถูกต้องสำหรับวิธีการโหลดแหล่งข้อมูล (I98ac7, b/149157296)
แก้ไขข้อบกพร่อง
- แก้ไขข้อขัดข้องเนื่องจาก IllegalStateException เมื่อ โดยใช้ตัวคั่นที่ตั้งค่า PagingConfig.maxSize (I0ed33, b/174787528)
- แก้ไขข้อบกพร่องที่ทำให้สถานะการโหลดสำหรับ PREPEND / APPEND ไม่
อัปเดตเป็น
NotLoading(endOfPaginationReached = true)
ทันที หลังจากการโหลดครั้งแรกหากตั้งค่า RemoteMediator ไว้ (I8cf5a) - แก้ไขข้อบกพร่องที่ API ด้านผู้นำเสนอ เช่น .snapshot(), .peek() ฯลฯ จะแสดงรายการก่อนหน้า (ไม่อัปเดต) ภายในการอัปเดต ListUpdateCallback
- แก้ไขข้อบกพร่องที่โอเปอเรเตอร์ตัวคั่นไม่เพิ่มส่วนหัวหรือส่วนท้ายเมื่อใช้กับ RemoteMediator
- แก้ไขข้อบกพร่องที่การอัปเดต LoadState เป็น NotLoading สำหรับ RemoteMediator จะค้างที่สถานะ กำลังโหลด
- แก้ไขข้อบกพร่องที่
.asPagingSourceFactory()
ความเข้ากันได้ของ API ของ Paging2.0 อาจทำให้ระบบเริ่มต้นDataSource
กับ CoroutineDispatcher ที่ไม่ถูกต้อง การดำเนินการนี้จะแก้ไขข้อขัดข้องและกรณี ANR ที่อาจเกิดขึ้น โดยเฉพาะเมื่อใช้ PagingSource ปัจจุบันของ Room ซึ่งใช้เส้นทางความเข้ากันได้นี้
เวอร์ชัน 3.0.0-alpha10
2 ธันวาคม 2020
ปล่อย androidx.paging:paging-*:3.0.0-alpha10
แล้ว เวอร์ชัน 3.0.0-alpha10 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
นำ API
dataRefreshFlow
และdataRefreshListener
ที่เลิกใช้งานแล้วออก เพราะซ้ำซ้อนกับการอัปเดต requestStateFlow / 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 ใหม่ตกแต่งอย่างจะได้รับเมื่อเข้าและออกจากโรงงานแล้ว
ด้วย
.invalidate()
API ที่ส่งต่อมายัง PagingSources ทั้งหมด จะปล่อยออกมา ขอขอบคุณ @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 โดยสมบูรณ์ด้วย แทนที่ด้วยอนุประโยค (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-Conversions ใน Kotlin ผ่านฟังก์ชัน (พร้อมใช้งานใน Kotlin 1.4) การทำเช่นนี้ยังแก้ไขข้อบกพร่องที่ ไม่ได้เรียกตัวแปร kotlin ของ Callback ที่เป็นโมฆะหลังจากเปลี่ยนรูปแบบ โดย.map
หรือ.mapByPage
(I1f244, b/165313046)
แก้ไขข้อบกพร่อง
- การโต้ตอบในการแบ่งหน้ากับ ViewPager ดีขึ้นอย่างมาก กล่าวอย่างเจาะจงคือ การแบ่งหน้าจะไม่ยกเลิกการโทรหา
RemoteMediator#load
อีกต่อไปเนื่องจากหน้าเว็บใช้งานไม่ได้ นอกจากนี้ จะทำให้คำขอโหลดต่อท้าย/เพิ่มไว้ข้างหน้าหากจำเป็นต้องรีเฟรชไม่ได้อีกต่อไป จนกว่าคำขอ "รีเฟรช" จะเสร็จสมบูรณ์ (I6390b, b/162252536) - เปิดใช้การตรวจสอบ Lint ของ API สำหรับ MissingGetterMatchingBuilder ใน androidx (I4bbea, b/138602561)
- แก้ไขข้อบกพร่องที่ผู้ช่วย
ConcatAdapter
.withLoadState*
รายจะ ข้อขัดข้องเนื่องจากแจ้งเตือน 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 ยอมรับโอเปอเรเตอร์แล้ว เป็นพารามิเตอร์ เพื่อควบคุมบริบทการดำเนินการ (รหัส 4372)
แก้ไขข้อบกพร่อง
- แก้ไขข้อยกเว้น IndexOutOfBounds ใน RemoteMediator ครบกำหนดแล้ว กับภาวะแข่งขัน (I00b7f, b/165821814)
- แก้ไขเงื่อนไขการแข่งขันในแหล่งข้อมูล -> Conversion ของ PagingSource ที่อาจทําให้ PagingSource ผลลัพธ์ไม่สนใจสัญญาณการทําให้ไม่ถูกต้องจากแหล่งข้อมูล
- แก้ไขปัญหาในตรรกะการดึงข้อมูลหน้าเว็บซึ่งบางครั้งอาจทำให้ไม่สามารถรับ PagingSource ใหม่ได้จนกว่าจะเรียกใช้ PagingDataAdapter.refresh()
- แก้ไขปัญหาที่ทำให้ตำแหน่งของการเลื่อนหายไปในบางครั้งเมื่อใช้ DataSource ที่แปลงเป็น PagingSource (เช่น ที่ผลิตโดยห้อง) ร่วมกับ 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
โดยมีข้อความชัดเจนขึ้น ขาดการสนับสนุน ID ที่เสถียรแล้ว เมื่อใดก็ตามที่ มีการเรียกPagingDataAdapter.setHasStableIds
(Ib3890, b/158801427)
แก้ไขข้อบกพร่อง
- เครื่องหมายแทรกตัวคั่นไม่กรองหน้าว่างออกซึ่งจะทำให้ ดึงข้อมูลระยะห่างเพื่อให้ผู้นำเสนอทำได้ล่วงหน้าแม้ในกรณีที่ หน้าว่างจำนวนมากแทรกอยู่ (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 เพื่อแสดงรายการคงที่ในบางสถานะ เช่น ก่อนหน้า การรีเฟรชเริ่มต้นเสร็จสิ้นหรือเพียงเพื่อทดสอบการเปลี่ยนรูปแบบ (รหัส134d) - เลิกใช้งาน dataRefresh Flow / Listener API ตามเดิม มีวัตถุประสงค์เพื่อแสดงสถานะรายการที่แสดงใน REFRESH แต่ด้วยการปรับปรุงเวลาของการโหลดสถานะ / เวลาเรียกกลับของ Listener และพร็อพเพอร์ตี้ itemCount มีความซ้ำซ้อน (Ia19f3)
- เพิ่ม Wrapper ของความเข้ากันได้ RxJava3 สำหรับ
PagingSource
และRemoteMediator
(I49ef3, b/161480176)
แก้ไขข้อบกพร่อง
- แปลง
PositionalDataSource
เป็นPagingSource
แล้วผ่าน ผู้ช่วยtoPagingSourceFactory
คน รวมถึงPagingSource
ที่สร้างโดยห้อง ให้ทำเครื่องหมายตัวเองอย่างถูกต้อง เพื่อสนับสนุนการกระโดด (I3e84c, b/162161201) - แก้ไขข้อบกพร่องที่ใช้รูปแบบซิงโครนัสของ sendData
บางครั้งจะนำไปสู่การแข่งขันที่ทำให้เกิด
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 แหล่งข้อมูลจาก Java ไปยัง แก้ความกำกวมระหว่างตัวแปรเดิมกับ Kotlin (If7b23, b/161150011)
- API ซ้ำซ้อนที่มีไว้เพื่ออำนวยความสะดวกแก่ผู้ใช้ Kotlin ถูกทำเครื่องหมายว่า @JvmSynthetic (I56ae5)
- เพิ่มโอเวอร์โหลดสำหรับตัวสร้างของ LoadResult.Page ซึ่งมีค่าเริ่มต้นเป็น items before และ itemsAfter เป็น COUNT_UNDEFINED (I47849)
- กำหนดให้โอเปอเรเตอร์ PagingData ที่มีอยู่ยอมรับวิธีการระงับ และเปิดตัว MapSync, FlatMapSync และ filterSync แบบไม่มีการระงับ สำหรับผู้ใช้ Java วิธีการเปลี่ยนรูปแบบที่มีอยู่ ย้ายไปยังฟังก์ชันส่วนขยาย เพื่อให้ผู้ใช้ Kotlin ต้องนำเข้าฟังก์ชันเหล่านั้น (I34239, b/159983232)
แก้ไขข้อบกพร่อง
- ขณะนี้ PagingSources ของ Room (และ PositionalDataSource) แสดงตัวคั่นนำหน้าโดยเป็นส่วนหนึ่งของหน้าแรก ดังนั้นผู้ใช้ ก็ไม่ต้องเลื่อนหน้าจอ (I6f747, b/160257628)
- สิทธิ์เข้าถึงรายการในตัวยึดตำแหน่งตอนนี้ เรียกใช้ PagingSource ได้อย่างถูกต้องจนกว่า หน้าเว็บแสดงค่าดัชนีที่ขอ หลังจากเปลี่ยนรูปแบบโดย PagingData.filter() (I95625, b/158763195)
- แก้ไขข้อบกพร่องที่บางครั้งเลื่อนตาม PagingSource แสดงผลข้อผิดพลาด ไม่สามารถทำให้ PagingDataAdapter.retry() ไม่ให้ลองอีกครั้ง (I1084f, b/160194384)
- แก้ไขปัญหาการเข้าถึงรายการหลังจากยกเลิกหน้า ไม่โหลดหน้าเว็บแม้ว่าการเข้าถึงรายการจะอยู่ในการดึงข้อมูลล่วงหน้า (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)
แก้ไขข้อบกพร่อง
- ตอนนี้เพจเจอร์จะตรวจสอบการใช้ PagingSource ซ้ำในโรงงาน เพื่อป้องกันการใช้ PagingSources ที่ไม่ถูกต้องโดยไม่ตั้งใจ ซึ่งทําให้เกิดข้อผิดพลาดที่ไม่ชัดเจน (I99809, b/158486430)
- ความล้มเหลวจาก RemoteMediator REFRESH จะไม่ขัดขวาง 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 มีคอมมิตเหล่านี้
ไลบรารีการสร้างหน้าเว็บอัปเดตเป็นเวอร์ชัน 3.0 แล้วเพื่อให้สามารถเปิดใช้งานฟีเจอร์ใหม่หลักๆ ได้มากมาย
ฟีเจอร์ใหม่ของ 3.0
- การรองรับโครูทีน Kotlin และ Flow คุณภาพสูง
- การรองรับการโหลดแบบไม่พร้อมกันที่มีCoroutines ระงับฟังก์ชัน, RxJava Single หรือ Guava ListenableFuture Primitives
- สัญญาณสถานะโหลดและข้อผิดพลาดในตัวสำหรับการออกแบบ UI ที่ตอบสนองตามอุปกรณ์ รวมถึงฟังก์ชันการลองใหม่และรีเฟรช
- การปรับปรุงเลเยอร์ที่เก็บ
- อินเทอร์เฟซแหล่งข้อมูลที่ใช้งานง่าย
- เครือข่ายที่ไม่ซับซ้อน + การแบ่งหน้าฐานข้อมูล
- การสนับสนุนการยกเลิก
- การปรับปรุงเลเยอร์งานนำเสนอ
ปัญหาที่ทราบ
- หน้า 3 Javadocs ยังไม่พร้อมใช้งาน ในระหว่างนี้ โปรดใช้คำแนะนำที่ลิงก์ด้านบนหรือเอกสาร 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
เผยแพร่อย่างไม่ถูกต้องจาก Branch ที่กำหนดค่าไม่ถูกต้อง โดยเผยให้เห็น API และฟังก์ชันที่ใช้งานบางส่วนซึ่งจะพร้อมใช้งานในรุ่นถัดไปการแบ่งหน้า
2.1.2
มีการแก้ไขศูนย์กลางการโหลดที่เปิดตัวครั้งแรกใน 2.1.1 แต่คราวนี้เลือกไว้อย่างถูกต้องจากรุ่น 2.1.0 เราขอแนะนำเป็นอย่างยิ่งให้อัปเกรดเป็นรุ่นนี้ หากคุณใช้เวอร์ชัน 2.1.1 อยู่
เวอร์ชัน 2.1.1
เวอร์ชัน 2.1.1
18 ธันวาคม 2019
ปล่อย androidx.paging:paging-*:2.1.1
แล้ว เวอร์ชัน 2.1.1 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- ตอนนี้การโหลดเริ่มต้นต่อเนื่องจาก PositionalDataSources จะศูนย์กลางอยู่ที่การเข้าถึงครั้งล่าสุดเมื่อปิดใช้ตัวยึดตำแหน่ง
เวอร์ชัน 2.1.0
เวอร์ชัน 2.1.0
25 มกราคม 2019
ระบบจะเผยแพร่การแบ่งหน้า 2.1.0
โดยไม่มีการเปลี่ยนแปลงจาก 2.1.0-rc01
เวอร์ชัน 2.1.0-rc01
6 ธันวาคม 2018
ระบบจะเผยแพร่การแบ่งหน้า 2.1.0-rc01
โดยไม่มีการเปลี่ยนแปลงจาก 2.1.0-beta01
เวอร์ชัน 2.1.0-beta01
1 พฤศจิกายน 2018
ระบบจะเผยแพร่การแบ่งหน้า 2.1.0-beta01
โดยไม่มีการเปลี่ยนแปลงจาก 2.1.0-alpha01
เวอร์ชัน 2.1.0-alpha01
12 ตุลาคม 2018
หน้า 2.1.0-alpha01
มีการเพิ่มเติมที่สำคัญ 2 รายการ ได้แก่ การลบหน้าและไลบรารีส่วนขยาย KTX สำหรับอาร์ติแฟกต์ทุกรายการ รวมถึงการเปลี่ยนแปลง API และการแก้ไขข้อบกพร่องอื่นๆ อีกมากมาย
การเปลี่ยนแปลง API
- เพิ่ม
PagedList.Config.Builder.setMaxSize()
เพื่อจำกัดจำนวนรายการที่โหลดในหน่วยความจำ - เพิ่ม
androidx.paging.Config()
เป็นทางเลือกของ Kotlin สำหรับPagedList.Config.Builder
แล้ว - เพิ่ม
androidx.paging.PagedList()
เป็นทางเลือกของ Kotlin สำหรับPagedList.Builder
แล้ว - เพิ่ม
DataSourceFactory.toLiveData()
เป็นทางเลือกของ Kotlin สำหรับLivePagedListBuilder
แล้ว - เพิ่ม
DataSourceFactory.toObservable()
และtoFlowable()
เป็นทางเลือกของ Kotlin สำหรับRxPagedListBuilder
แล้ว - เพิ่ม
AsyncPagedListDiffer.addPagedListListener()
เพื่อฟังเมื่อมีการสลับ PagedList b/111698609 - เพิ่ม
PagedListAdapter.onCurrentListChanged()
ตัวแปรที่ผ่านรายการเก่าและใหม่ ตัวแปรก่อนหน้าที่เลิกใช้งานแล้ว - เพิ่มรูปแบบ
PagedListAdapter/AsyncPagedListDiffer.submitList()
แล้ว ซึ่งจะใช้ Callback เพิ่มเติมซึ่งจะทริกเกอร์หาก/เมื่อรายการแบ่งหน้าแสดงขึ้นหลังจากความแตกต่าง ซึ่งจะช่วยให้คุณซิงค์การสลับ PagedList กับการอัปเดต UI อื่นๆ ได้ b/73781068 - เพิ่ม
PagedList.getLoadedCount()
แล้วเพื่อแจ้งจำนวนรายการในหน่วยความจำ โปรดทราบว่าผลลัพธ์จะเท่ากับ.size()
เสมอหากปิดใช้ตัวยึดตำแหน่ง
แก้ไขข้อบกพร่อง
- แก้ไขเงื่อนไขการแข่งขันเมื่อแยกความแตกต่างระหว่างการนำรายชื่อมาใช้ซ้ำ b/111591017
- ตอนนี้
PagedList.loadAround()
แสดงผลIndexOutOfBoundsException
เมื่อดัชนีไม่ถูกต้อง ก่อนหน้านี้ อุปกรณ์อาจขัดข้องโดยไม่ทราบข้อยกเว้นอื่นๆ ที่ไม่ชัดเจน - แก้ไขกรณีที่การโหลดเริ่มต้นขนาดเล็กมากและข้อมูลที่ไม่เปลี่ยนแปลงจะทำให้ไม่มีการโหลด b/113122599 อีก
เวอร์ชัน 2.0.0
เวอร์ชัน 2.0.0
1 ตุลาคม 2018
เผยแพร่การแบ่งหน้า 2.0.0
แล้วด้วยการแก้ไขข้อบกพร่องเพียงจุดเดียว
แก้ไขข้อบกพร่อง
- แก้ไขข้อขัดข้องที่อาจเกิดขึ้นกับการเลื่อนเร็วมากโดยใช้
PositionalDataSource
และตัวยึดตำแหน่ง b/114635383
เวอร์ชัน 2.0.0-beta01
2 กรกฎาคม 2018
แก้ไขข้อบกพร่อง
- เนื้อหาที่แก้ไขแล้วจะหายไปในบางกรณีที่มีการแทรกนำหน้า (ปิดใช้ตัวยึดตำแหน่ง, PositionalDataSource) b/80149146
- (เผยแพร่แล้วใน
1.0.1
) แก้ไขข้อขัดข้องที่PagedListAdapter
และAsyncPagedListDiffer
ไม่ส่งสัญญาณเหตุการณ์การย้าย b/110711937
การขึ้นต่อกันก่อน AndroidX
สำหรับ Paging เวอร์ชันก่อน AndroidX ที่ตามมา ให้ใส่ทรัพยากร Dependency ต่อไปนี้
dependencies {
def paging_version = "1.0.0"
implementation "android.arch.paging:runtime:$paging_version"
// alternatively - without Android dependencies for testing
testImplementation "android.arch.paging:common:$paging_version"
// optional - RxJava support
implementation "android.arch.paging:rxjava2:$paging_version"
}
เวอร์ชัน 1.0.1
เวอร์ชัน 1.0.1
26 มิถุนายน 2018
เผยแพร่หน้า 1.0.1
พร้อมการแก้ไขข้อบกพร่องเดียวใน runtime
เราขอแนะนำให้ใช้ 1.0.1
เพื่อความเสถียร การแบ่งหน้า RxJava2 1.0.1
ก็เผยแพร่ได้เช่นกัน ซึ่งเหมือนกับ 1.0.0-rc1
แก้ไขข้อบกพร่อง
- แก้ไขข้อขัดข้องที่
PagedListAdapter
และAsyncPagedListDiffer
ไม่ส่งสัญญาณเหตุการณ์การย้าย b/110711937
RxJava2 เวอร์ชัน 1.0.0
RxJava2 เวอร์ชัน 1.0.0-rc1
16 พฤษภาคม 2018
การแบ่งหน้า RxJava2 1.0.0-rc1
กําลังจะย้ายไปยังผู้สมัครรุ่นที่ไม่มีการเปลี่ยนแปลงจากการเริ่มต้น
อัลฟ่า
เวอร์ชัน 1.0.0
เวอร์ชัน 1.0.0-rc1
19 เมษายน 2018 ตัวเลือกการเผยแพร่การแบ่งหน้า
เราไม่มีปัญหาที่ทราบหรือฟีเจอร์ใหม่ใดๆ ตามกำหนดการสำหรับ
การแบ่งหน้ารุ่น 1.0.0
โปรดอัปเกรดโปรเจ็กต์เพื่อใช้ 1.0.0-rc1
และ
ช่วยเราทดสอบการต่อสู้เพื่อที่เราจะได้ให้บริการ 1.0.0
ได้อย่างมั่นคง
ไม่มีการเปลี่ยนแปลงในรุ่นนี้ แต่เหมือนกับ 1.0.0-beta1
เวอร์ชัน 1.0.0-beta1
5 เมษายน 2018
การแบ่งหน้าจะเป็นเวอร์ชันเบต้าเป็นระยะเวลาสั้นๆ ก่อนที่จะเปิดตัวผู้สมัคร
เราไม่ได้วางแผนเปลี่ยนแปลง API เพิ่มเติมสำหรับ Paging 1.0
และการเปลี่ยนแปลง API มีค่าสูงมาก
การสนับสนุน Alpha RxJava2 สำหรับการแบ่งหน้าเผยแพร่เป็นโมดูลที่ไม่บังคับแยกต่างหาก (android.arch.paging:rxjava2:1.0.0-alpha1
)
และจะมีเวอร์ชันแยกกันชั่วคราวจนกว่าอุปกรณ์จะเสถียร
ไลบรารีใหม่นี้มี RxJava2 เป็นทางเลือกของ LivePagedListBuilder
ซึ่งสามารถสร้าง
Observable
และ Flowable
วินาที ซึ่งใช้เวลา Scheduler
วินาที แทนที่จะเป็น Executor
วินาที:
Kotlin
val pagedItems = RxPagedListBuilder(myDataSource, /* page size */ 50) .setFetchScheduler(myNetworkScheduler) .buildObservable()
Java
Observable<PagedList<Item>> pagedItems = RxPagedListBuilder(myDataSource, /* page size */ 50) .setFetchScheduler(myNetworkScheduler) .buildObservable();
ฟีเจอร์ใหม่
- เพิ่ม
RxPagedListBuilder
ผ่านอาร์ติแฟกต์android.arch.paging:rxjava2
ใหม่แล้ว
การเปลี่ยนแปลง API
API มีการเปลี่ยนแปลงเพื่อชี้แจงบทบาทของผู้ดำเนินการในเครื่องมือสร้าง
เปลี่ยนชื่อ
setBackgroundThreadExecutor()
เป็นsetFetchExecutor()
(ในPagedList.Builder
และLivePagedListBuilder
) แล้วเปลี่ยนชื่อ
setMainThreadExecutor()
เป็นsetNotifyExecutor()
(ในPagedList.Builder
) แล้ว
แก้ไขสมาชิก
PagedList.mCallbacks
รายให้เป็นแบบส่วนตัวแล้ว
แก้ไขข้อบกพร่อง
LivePagedListBuilder
จะทริกเกอร์โหลดPagedList
เริ่มต้นของตัวดำเนินการที่ระบุ แทนพูลเทรด IO ของคอมโพเนนต์ Archแก้ไขลักษณะการทำงานที่เป็นโมฆะใน Wrapper
DataSource
ภายใน (ใช้เพื่อดำเนินการDataSource.map
และการโหลดPositionalDataSource
ที่ปิดใช้ตัวยึดตำแหน่ง) b/77237534
เวอร์ชัน 1.0.0-alpha7
21 มีนาคม 2018
เผยแพร่การแบ่งหน้า 1.0.0-alpha7
พร้อมกับวงจร 1.1.1
แล้ว เนื่องจากการแบ่งหน้า alpha7 ขึ้นอยู่กับการย้ายคลาส Function
ที่กล่าวถึงข้างต้น คุณจึงต้องอัปเดตทรัพยากร Dependency ของ lifecycle:runtime
เป็น android.arch.lifecycle:runtime:1.1.1
เราวางแผนว่าจะแบ่งหน้า alpha7
เป็นรุ่นสุดท้ายก่อนที่จะเปิดตัว Paging Hit เวอร์ชันเบต้า
การเปลี่ยนแปลง API
- ขณะนี้วัตถุ
DataSource.LoadParams
มีตัวสร้างสาธารณะ และวัตถุDataSource.LoadCallback
เป็นนามธรรมแล้ว การดำเนินการนี้จะเปิดใช้การรวมDataSource
หรือทดสอบDataSource
โดยตรงด้วยการจำลอง Callback b/72600421 - ผู้ทำแผนที่สำหรับแหล่งข้อมูลและ DataSource.factor
map(Function<IN,OUT>)
ช่วยให้คุณเปลี่ยนรูปแบบ รวม หรือตกแต่งผลลัพธ์ที่โหลดโดยDataSource
ได้mapByPage(<List<IN>,List<OUT>>)
จะเปิดใช้ตัวเลือกเดียวกันสำหรับการประมวลผลแบบกลุ่ม (เช่น หากรายการที่โหลดจาก SQL ต้องค้นหาฐานข้อมูลแยกต่างหากเพิ่มเติม ก็จะทำเป็นกลุ่มได้)
- เพิ่ม
PagedList#getDataSource()
ไว้เพื่อความสะดวก b/72611341 - นำคลาสที่เลิกใช้งานทั้งหมดออกจาก API แล้ว รวมถึงแพ็กเกจ
recyclerview.extensions
และLivePagedListProvider
ที่เหลืออยู่ - ระบบได้เปลี่ยน
DataSource.Factory
จากอินเทอร์เฟซเป็นคลาสนามธรรมเพื่อเปิดใช้ฟังก์ชันการทำงานของแผนที่แล้ว
แก้ไขข้อบกพร่อง
- เปลี่ยนช่างก่อสร้างให้เป็นขั้นสุดท้าย b/70848565
- ตอนนี้การใช้งานห้อง
DataSource
ได้รับการแก้ไขแล้วเพื่อจัดการกับการค้นหาหลายตาราง การแก้ไขนี้อยู่ในห้อง 1.1.0-beta1 ดูด้านบน - แก้ไขข้อบกพร่องที่ระบบจะไม่เรียกใช้
BoundaryCallback.onItemAtEndLoaded
สำหรับPositionalDataSource
หากเปิดใช้ตัวยึดตำแหน่งและ ขนาดโดยรวมจะเป็นผลคูณที่แน่นอนของขนาดหน้า
เวอร์ชัน 1.0.0-alpha5
22 มกราคม 2018
แก้ไขข้อบกพร่อง
- แก้ไขการโหลดหน้าเว็บเมื่อปิดใช้ตัวยึดตำแหน่ง b/70573345
- การบันทึกเพิ่มเติมสำหรับการติดตามข้อบกพร่อง IllegalArgumentException b/70360195 (และการแก้ไขจากฝั่งห้องที่ไม่แน่นอน)
- การแก้ไขโค้ดตัวอย่าง Javadoc b/70411933, b/71467637