การแบ่งหน้า
ตารางนี้จะแสดงรายการอาร์ติแฟกต์ทั้งหมดในกลุ่ม androidx.paging
อาร์ติแฟกต์ | รุ่นที่เสถียร | รุ่นที่อาจได้รับการเผยแพร่ | รุ่นเบต้า | เวอร์ชันอัลฟ่า |
---|---|---|---|---|
paging-* | 3.3.4 | - | - | - |
paging-compose | 3.3.4 | - | - | - |
การประกาศทรัพยากร Dependency
หากต้องการเพิ่มการอ้างอิงไปยังการแบ่งหน้า คุณต้องเพิ่มที่เก็บ Maven ของ Google ลงในโปรเจ็กต์ อ่านข้อมูลเพิ่มเติมในที่เก็บ Maven ของ Google
เพิ่มการอ้างอิงสำหรับอาร์ติแฟกต์ที่ต้องการในไฟล์ 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
ดูข้อมูลเพิ่มเติมเกี่ยวกับการพึ่งพาได้ที่เพิ่มการพึ่งพาบิลด์
ความคิดเห็น
ความคิดเห็นของคุณช่วยปรับปรุง Jetpack ได้ โปรดแจ้งให้เราทราบหากพบปัญหาใหม่หรือมีแนวคิดในการปรับปรุงคลังนี้ โปรดดูปัญหาที่มีอยู่ในคลังนี้ก่อนสร้างปัญหาใหม่ คุณสามารถเพิ่มการโหวตให้กับปัญหาที่มีอยู่ได้โดยคลิกปุ่มดาว
ดูข้อมูลเพิ่มเติมในเอกสารประกอบของเครื่องมือติดตามปัญหา
เวอร์ชัน 3.3
เวอร์ชัน 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 ภายในหรือAsyncPagingDataDiffer
ของpaging-runtime
- เพิ่มเมธอดตัวช่วย
LoadStates
และCombinedLoadStates
ใหม่ในhasError
และisIdle
เพื่อตรวจสอบว่าLoadStates
อยู่ในสถานะข้อผิดพลาดหรือNotLoading
หรือไม่ตามลำดับ นอกจากนี้ ยังเพิ่มawaitNotLoading()
เมธอดส่วนขยาย Kotlin ใหม่ใน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
- ตอนนี้การแบ่งหน้าใช้คำอธิบายประกอบ
@MainThread
ของ AndroidX Annotation สำหรับโค้ดทั่วไป (I78f0d, b/327682438)
เวอร์ชัน 3.3.0-alpha04
6 มีนาคม 2024
androidx.paging:paging-*:3.3.0-alpha04
ได้รับการปล่อยแล้ว เวอร์ชัน 3.3.0-alpha04 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขข้อผิดพลาดเล็กน้อยในเอกสารประกอบที่เกี่ยวข้องกับการเพิ่มความเข้ากันได้กับแพลตฟอร์มหลายแพลตฟอร์มของ Kotlin (aosp/2950785)
เวอร์ชัน 3.3.0-alpha03
7 กุมภาพันธ์ 2024
androidx.paging:paging-*:3.3.0-alpha03
ได้รับการปล่อยแล้ว เวอร์ชัน 3.3.0-alpha03 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
PagingDataPresenter
เป็นชั้นเรียนสาธารณะแล้ว ตอนนี้คุณสร้างโปรแกรมนำเสนอแบบหลายแพลตฟอร์มบนPagingDataPresenter
ได้แล้วโดยไม่ต้องใช้ Paging API ภายในหรือ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 ที่ช่วยย้าย 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 ของอาร์ทแฟกต์การทดสอบการแบ่งหน้าเว็บจะค้างเมื่อส่งผ่านโฟลว์ที่สร้างโดยใช้PagingData.from(List)
เนื่องจากasSnapshot()
ไม่มีข้อมูลว่าเมื่อใดการโหลดเสร็จสิ้น (ต่างจากPagingData.from(List, LoadStates)
overload) วิธีแก้ปัญหานี้ใช้ได้กับเวิร์กโฟลว์ที่ทําได้ (เช่น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 Compose ตรงกับอาร์ติแฟกต์ Paging อื่นๆ ทั้งหมด การเปลี่ยนแปลงตั้งแต่เวอร์ชัน 3.1.0 มีดังนี้
- รองรับการแสดงตัวอย่างรายการข้อมูลจำลองโดยการสร้าง
PagingData.from(fakeData)
และรวมPagingData
นั้นไว้ในMutableStateFlow
(เช่นMutableStateFlow(PagingData.from(listOf(1, 2, 3)))
) ส่งการไหลนี้ไปยังคอมโพสิเบิล@Preview
ในฐานะผู้รับเพื่อให้collectAsLazyPagingItems()
แสดงตัวอย่าง - รองรับเลย์เอาต์แบบ Lazy ทั้งหมด เช่น
LazyVerticalGrid
และHorizontalPager
รวมถึงคอมโพเนนต์ Lazy ที่กําหนดเองจากไลบรารี Wear และทีวี ซึ่งทำได้ผ่านเมธอดส่วนขยายLazyPagingItems
ระดับล่างใหม่itemKey
และitemContentType
ซึ่งจะช่วยให้คุณใช้พารามิเตอร์key
และcontentType
กับitems
API มาตรฐานที่มีอยู่แล้วสำหรับ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]
ซึ่งมีผลกับทั้งการแบ่งหน้าด้วยมุมมองหรือการแบ่งหน้าด้วยคอมโพซ - เพิ่มคอนสตรคเตอร์สําหรับ
PagingDataAdapter
และAsyncPagingDataDiffer
ซึ่งยอมรับCoroutineContext
แทนCoroutineDispatcher
- เพิ่ม
PagingSourceFactory
อินเทอร์เฟซแบบฟังก์ชันใหม่ซึ่งแสดงอินเทอร์เฟซ API ที่ชัดเจนกว่า Lambda ของ () ->PagingSource
ก่อนหน้านี้ โรงงานนี้สามารถใช้เพื่อสร้างอินสแตนซ์ของ 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 มีการคอมมิตเหล่านี้
การเขียนแบบแบ่งหน้า
- คอมโพสิชันแบบแบ่งหน้ามีความเสถียรของ API แล้วอย่างเป็นทางการ ด้วยเหตุนี้ เราจึงอัปเดตเวอร์ชันจาก
1.0.0-alpha20
เป็นเวอร์ชันที่ตรงกับเวอร์ชันของรายการอื่นๆ ทั้งหมดในการจัดเรียง
การเปลี่ยนแปลง API
- นำ API
items(LazyPagingItems)
และitemsIndexed(LazyPagingItems)
ที่เลิกใช้งานแล้วออกจาก Paging Compose ดูตัวอย่าง API ที่ใช้แทนได้ในบันทึกประจำรุ่นของ Paging Compose1.0.0-alpha20
(I9626e)
เวอร์ชัน 3.2.0-alpha06
24 พฤษภาคม 2023
androidx.paging:paging-*:3.2.0-alpha06
ได้รับการปล่อยแล้ว เวอร์ชัน 3.2.0-alpha06 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- เพิ่มอินเทอร์เฟซแบบฟังก์ชัน
PagingSourceFactory
ใหม่ซึ่งแสดงอินเทอร์เฟซ API ที่ชัดเจนกว่า Lambda() -> PagingSource
ที่มีอยู่ สามารถใช้โรงงานนี้เพื่อสร้างอินสแตนซ์Pager
(I33165, b/280655188) - เพิ่ม
paging-testing
API ใหม่ของList<Value>.asPagingSourceFactory()
เพื่อรับ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
ซึ่งจะแสดงผลลัพธ์เป็น Factory ที่นํากลับมาใช้ใหม่ได้สําหรับการสร้างอินสแตนซ์PagingSource
(I5ff4f, I705b5) - อัปเดตเอกสารประกอบเกี่ยวกับ
LoadResult.Page
constructor เพื่อชี้แจงความจำเป็นในการลบล้างitemsBefore
และitemsAfter
เพื่อรองรับการข้าม (Ied354)
การมีส่วนร่วมจากภายนอก
- ขอขอบคุณ Veyndan ที่ช่วยย้ายการแบ่งหน้าออกจาก Android/JVM (#525, #523, #520, #519, #507, #506, #505, #499, #497, #496, #493)
เวอร์ชัน 3.2.0-alpha04
8 กุมภาพันธ์ 2023
androidx.paging:paging-*:3.2.0-alpha04
ได้รับการปล่อยแล้ว เวอร์ชัน 3.2.0-alpha04 มีการคอมมิตเหล่านี้
การทดสอบการแบ่งหน้า
- ตอนนี้อาร์ติแฟกต์
paging-testing
มีเมธอดasPagingSourceFactory
เพื่อสร้างpagingSourceFactory
จากFlow<List<Value>>
เพื่อส่งไปยัง PagerList<Value>>
แต่ละรายการที่ส่งออกจากโฟลว์แสดงถึงการสร้างข้อมูลแบบแบ่งหน้า วิธีนี้ช่วยให้การทดสอบการแบ่งหน้าในรายการต่างๆ เช่น การเปลี่ยนรูปแบบ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
ช่วยให้คุณจําลอง 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
และ UI จริงที่ปกติแล้วต้องใช้เพื่อจําลองการผสานรวมการแบ่งหน้าจากต้นทางถึงปลายทาง
TestPager
ควรถือเป็นข้อมูลจำลอง ซึ่งเป็นข้อมูลจำลองการทดสอบที่จำลองการติดตั้งใช้งานจริงของ Pager
พร้อมกับมอบแพลตฟอร์ม API ที่เข้าใจง่ายสำหรับการทดสอบ PagingSource
API เหล่านี้เป็น suspend
API และควรทำงานภายใน runTest
ตามที่ระบุไว้ในคู่มือการทดสอบโคโริวทีนของ Kotlin ใน Android
ตัวอย่างการใช้ API เหล่านี้มีอยู่ในการทดสอบ room-paging
ซึ่งได้รับการปรับโครงสร้างเพื่อใช้ TestPager
การเปลี่ยนแปลง API
- เปิดใช้การทำซ้ำที่สะดวกใน
LoadResult.Page.data
ถึงLoadResult.Page.iterator()
ซึ่งจะอนุญาตการใช้เมธอดflatten
ของไลบรารีมาตรฐาน Kotlin โดยอ้อมเมื่อได้รับ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
อย่างถูกต้องแล้ว ในกรณีที่จะแสดงผลลัพธ์เป็นค่าว่าง แต่มีการตั้งค่าinitialKey
ที่ไม่ว่าง (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
จาก Paging จะรอค่าที่ถูกต้องจากทั้งPagingSource
และRemoteMediator
ก่อนส่งออกไปยังดาวน์สตรีม ตอนนี้PagingData
รุ่นใหม่จะเริ่มต้นด้วยLoading
สำหรับสถานะการรีเฟรชอย่างถูกต้องเสมอ แทนที่จะรีเซ็ตเป็นNotLoading
อย่างไม่ถูกต้องในบางกรณี .loadStateFlow
และ.addLoadStateListener
ใน API ของโปรแกรมนำเสนอจะไม่ส่งCombinedLoadStates
เริ่มต้นซ้ำอีกต่อไปซึ่งตั้งค่าสถานะสื่อกลางเป็นnull
เสมอ
- ตอนนี้
- การยกเลิกในรุ่นที่ผ่านมาตอนนี้เกิดขึ้นอย่างรวดเร็วเมื่อมีการทำให้โมเดลใช้งานไม่ได้ / รุ่นใหม่ คุณไม่จำเป็นต้องใช้
.collectLatest
ในFlow<PagingData>
อีกต่อไป แต่เรายังคงแนะนำให้ใช้ - เพิ่ม
PagingSource.LoadResult.Invalid
เป็นประเภทผลลัพธ์ใหม่จากPagingSource.load
ซึ่งทําให้การแบ่งหน้าทิ้งคําขอโหลดที่รอดําเนินการหรือที่จะเกิดขึ้นในอนาคตสําหรับPagingSource
นี้และทำให้PagingSource
ดังกล่าวใช้งานไม่ได้ ประเภทผลลัพธ์นี้ออกแบบมาเพื่อจัดการข้อมูลที่อาจไม่ถูกต้องหรือล้าสมัยซึ่งอาจแสดงผลจากฐานข้อมูลหรือเครือข่าย - เพิ่ม
.onPagesPresented
และ.addOnPagesUpdatedListener
presenter API ซึ่งทริกเกอร์พร้อมกันเมื่อแสดงหน้าใน UI การอัปเดตหน้าเว็บอาจเกิดขึ้นในสถานการณ์ต่อไปนี้- การโหลดครั้งแรกของ PagingData รุ่นใหม่เสร็จสมบูรณ์ ไม่ว่ารุ่นใหม่จะมีการเปลี่ยนแปลงรายการที่แสดงหรือไม่ เช่น รายการใหม่จะเรียกใช้การเรียกกลับนี้แม้ว่าจะโหลดครั้งแรกโดยไม่มีการอัปเดตเนื่องจากรายการเหมือนกันทุกประการ
- ระบบจะแทรกหน้าเว็บ แม้ว่าหน้าเว็บที่แทรกจะไม่มีรายการใหม่ก็ตาม
- ระบบจะทิ้งหน้าเว็บแม้ว่าหน้านั้นจะไม่มีข้อมูล
เวอร์ชัน 3.1.0-rc01
3 พฤศจิกายน 2021
androidx.paging:paging-*:3.1.0-rc01
ได้รับการปล่อยแล้ว เวอร์ชัน 3.1.0-rc01 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขเงื่อนไขการแข่งขัน + หน่วยความจํารั่วใน .cachedIn() ในกรณีที่มีการส่งเหตุการณ์การโหลดหลายรายการโดย Paging ดาวน์สตรีมขณะที่ไม่มีผู้สังเกตการณ์ หรือระหว่างที่ผู้สังเกตการณ์เปลี่ยนเป็น 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
ก่อนหน้านี้ เป็นไปได้ที่ endOfPaginationReached จะเท่ากับtrue
สำหรับ RemoteMediatorREFRESH
แต่จะใช้กับ PagingSource ไม่ได้ ตอนนี้เรารวมลักษณะการทํางานนี้เพื่อแสดงผลfalse
เสมอ เนื่องจาก REFRESH ไม่ควรเป็นค่าสิ้นสุด และตอนนี้ได้บันทึกไว้เป็นส่วนหนึ่งของสัญญา API ใน LoadStates เมื่อตัดสินใจว่าจะสิ้นสุดการแบ่งหน้าหรือไม่ คุณควรพิจารณาตามคำสั่ง APPEND หรือ PREPEND เสมอ (I047b6) ตอนนี้ LoadStates จาก Paging จะรอค่าที่ถูกต้องจากทั้ง PagingSource และ RemoteMediator ก่อนที่จะส่งออกดาวน์สตรีมระหว่างการสร้าง ซึ่งจะช่วยป้องกันไม่ให้ PagingData รุ่นใหม่ส่งค่า NotLoading ใน CombinedLoadStates.source.refresh หากมีการโหลดอยู่แล้ว ตอนนี้ PagingData รุ่นใหม่จะเริ่มด้วย Loading สำหรับสถานะการรีเฟรชอย่างถูกต้องเสมอ แทนที่จะรีเซ็ตเป็น NotLoading อย่างไม่ถูกต้องในบางกรณี
การยกเลิกในรุ่นที่ผ่านมาเกิดขึ้นอย่างรวดเร็วเมื่อมีการลบล้าง/รุ่นใหม่ คุณไม่จำเป็นต้องใช้ .collectLatest ใน
Flow<PagingData>
อีกต่อไป แต่เรายังคงขอแนะนำให้ใช้ (I0b2b5, b/177351336, b/195028524).loadStateFlow
และ.addLoadStateListener
ใน API ของโปรแกรมนำเสนอจะไม่ส่งCombinedLoadStates
เริ่มต้นที่กําหนดสถานะสื่อกลางเป็นnull
และสถานะแหล่งที่มาเป็นNotLoading(endOfPaginationReached = false)
ซ้ำอีกต่อไป ซึ่งหมายความว่า- ระบบจะป้อนข้อมูลสถานะสื่อกลางเสมอหากคุณใช้ RemoteMediator
- การลงทะเบียนตัวรับฟัง 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 อย่าง LoadResult.Invalid ลงใน PagingSource เมื่อ PagingSource.load แสดงผลเป็น PagingResult.Invalid การแบ่งหน้าจะทิ้งข้อมูลที่โหลดและทำให้ PagingSource เป็นโมฆะ ประเภทผลลัพธ์นี้ออกแบบมาเพื่อจัดการข้อมูลที่อาจไม่ถูกต้องหรือล้าสมัยซึ่งอาจแสดงผลจากฐานข้อมูลหรือเครือข่าย
ตัวอย่างเช่น หากมีการเขียนลงในฐานข้อมูลที่สําคัญ แต่ PagingSource ไม่ได้ทำให้ข้อมูลเป็นโมฆะในเวลาที่เหมาะสม PagingSource อาจแสดงผลลัพธ์ที่ไม่สอดคล้องกันหากการใช้งานขึ้นอยู่กับความคงที่ของชุดข้อมูลสำรองที่โหลด (เช่น LIMIT การติดตั้งใช้งานฐานข้อมูลรูปแบบ OFFSET) ในกรณีนี้ เราขอแนะนำให้ตรวจสอบการทำให้ข้อมูลไม่ถูกต้องหลังจากการโหลด และแสดงผลลัพธ์เป็น LoadResult.Invalid ซึ่งจะทำให้การแบ่งหน้าทิ้งคําขอโหลดที่รอดําเนินการหรือที่จะเกิดขึ้นในอนาคตสําหรับ PagingSource นี้ และทำให้ข้อมูลไม่ถูกต้อง
Paging2 API ที่ใช้ LivePagedList หรือ RxPagedList ยังรองรับประเภทผลลัพธ์นี้ด้วย เมื่อใช้ PagingSource กับ PagedList API ของ Paging2 ระบบจะแยก PagedList ออกทันที ซึ่งจะหยุดการพยายามโหลดข้อมูลใน PagedList นี้อีก และทริกเกอร์การทำให้ PagingSource ใช้งานไม่ได้
LoadResult เป็นคลาสที่ปิด ซึ่งหมายความว่าการเปลี่ยนแปลงนี้เข้ากันไม่ได้กับซอร์สโค้ด เช่น Use Case ที่ใช้ผลลัพธ์จาก PagingSource.load โดยตรงจะต้องจัดการกับ LoadResult.Invalid ในเวลาคอมไพล์ ตัวอย่างเช่น ผู้ใช้ Kotlin ที่ใช้ exhaustive-when เพื่อตรวจสอบประเภทผลลัพธ์จะต้องเพิ่มการตรวจสอบประเภทที่ไม่ถูกต้อง (Id6bd3, b/191806126, b/192013267)
การแก้ไขข้อบกพร่อง
- ตอนนี้การเรียกกลับที่ทำให้เกิดการลบล้างซึ่งเพิ่มผ่าน PagingSource.registerInvalidatedCallback หรือ DataSource.addInvalidatedCallback จะทริกเกอร์โดยอัตโนมัติหากมีการลงทะเบียนใน PagingSource / DataSource ที่ไม่ถูกต้องอยู่แล้ว วิธีนี้ช่วยแก้ปัญหาการแย่งกันใช้ทรัพยากรซึ่งทําให้การแบ่งหน้าทิ้งสัญญาณการลบล้างและค้างเมื่อระบุแหล่งที่มาที่ไม่ถูกต้องอยู่แล้วระหว่างการโหลดครั้งแรก นอกจากนี้ ระบบจะนําการเรียกกลับที่ใช้งานไม่ได้ออกอย่างถูกต้องหลังจากทริกเกอร์แล้ว เนื่องจากมีการรับประกันว่าจะมีการเรียกใช้ไม่เกิน 1 ครั้ง (I27e69)
- ส่งค่าเริ่มต้นของตัวยึดตําแหน่ง (InitialPagedList) จากสตรีม PagedList ที่สร้างขึ้นใหม่ เช่น LivePagedListBuilder หรือ RxPagedListBuilder จะไม่ล้างข้อมูลที่โหลดไว้ก่อนหน้านี้อีกต่อไป
เวอร์ชัน 3.1.0-alpha02
1 กรกฎาคม 2021
androidx.paging:paging-*:3.1.0-alpha02
ได้รับการปล่อยแล้ว เวอร์ชัน 3.1.0-alpha02 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
เพิ่ม API ของ Listener และตัวแสดงขั้นตอนใน onPagesPresented ซึ่งจะทริกเกอร์ทันทีหลังจากหน้าเว็บที่แสดงได้รับการอัปเดตใน 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)
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่บางครั้งการแบ่งหน้าจะส่งเหตุการณ์ที่ไม่มีการดําเนินการไปยัง RecyclerView ซึ่งอาจทําให้ผู้ฟังบางรายทริกเกอร์ก่อนเวลาอันควร (Ic507f, b/182510751)
การมีส่วนร่วมจากภายนอก
- เพิ่ม API ที่เข้ากันได้กับ PagedList ที่เลิกใช้งานแล้วลงในอาร์ติแฟกต์ rxjava3 (Id1ce2, b/182497591)
คอมโพสิชันแบบแบ่งหน้าเวอร์ชัน 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 ทั้งหมด
ก่อนหน้านี้ Paging Compose มีส่วนขยาย items
และ itemsIndexed
ที่กําหนดเองใน LazyListScope
ซึ่งหมายความว่าคุณไม่สามารถใช้ Paging Compose กับเลย์เอาต์แบบ Lazy อื่นๆ เช่น LazyVerticalGrid
, HorizontalPager
หรือคอมโพเนนต์แบบ Lazy ที่กําหนดเองอื่นๆ ที่มาจากไลบรารี Wear และ TV การแก้ไขปัญหาความยืดหยุ่นนี้คือการอัปเดตหลักสำหรับรุ่นนี้
เราต้องสร้าง API ที่เลเยอร์อื่นเพื่อรองรับเลย์เอาต์แบบ Lazy เพิ่มเติม แทนที่จะให้บริการ items
API ที่กําหนดเองสําหรับเลย์เอาต์แบบ Lazy แต่ละรายการ ตอนนี้ Paging Compose มีเมธอดส่วนขยายระดับต่ำกว่าเล็กน้อยใน LazyPagingItems
ใน itemKey
และ itemContentType
API เหล่านี้มุ่งเน้นที่จะช่วยให้คุณใช้พารามิเตอร์ key
และ contentType
กับ items
API มาตรฐานที่มีอยู่แล้วสําหรับ 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
- ตอนนี้ฟังก์ชันชิ้นงาน
items
และitemsIndexed
ในLazyListScope
รองรับพารามิเตอร์contentType
แล้ว เพื่อช่วยให้ย้ายข้อมูลไปยัง API ใหม่ได้ง่ายขึ้น ซึ่งสอดคล้องกับการรองรับใน API ใหม่ (Ib1918, b/255283378)
การอัปเดตทรัพยากร Dependency
- Paging Compose ได้อัปเดตทรัพยากรจาก Compose 1.0.5 เป็น Compose 1.2.1 แล้ว (Ib1918, b/255283378)
เวอร์ชัน 1.0.0-alpha18
8 กุมภาพันธ์ 2023
androidx.paging:paging-compose:1.0.0-alpha18
เผยแพร่โดยไม่มีการเปลี่ยนแปลง เวอร์ชัน 1.0.0-alpha18 มีการคอมมิตเหล่านี้
เวอร์ชัน 1.0.0-alpha17
24 ตุลาคม 2022
androidx.paging:paging-compose:1.0.0-alpha17
ได้รับการปล่อยแล้ว เวอร์ชัน 1.0.0-alpha17 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- เพิ่มการรองรับ
CoroutineContext
ที่กําหนดเองเมื่อเรียกใช้collectLazyPagingItems
(I7a574, b/243182795, b/233783862)
เวอร์ชัน 1.0.0-alpha16
10 สิงหาคม 2022
androidx.paging:paging-compose:1.0.0-alpha16
ได้รับการปล่อยแล้ว เวอร์ชัน 1.0.0-alpha16 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้การแบ่งหน้าจะแสดงบันทึกผ่านคลาส
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 และ item getter ของ 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 เวอร์ชันอัลฟ่า 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
ให้การผสานรวมระหว่างไลบรารีการแบ่งหน้ากับ Jetpack Compose ตัวอย่างการใช้งานแบบง่าย
@Composable
@OptIn(ExperimentalLazyDsl::class)
fun ItemsDemo(flow: Flow<PagingData<String>>) {
val lazyPagingItems = flow.collectAsLazyPagingItems()
LazyColumn {
items(lazyPagingItems) {
Text("Item is $it")
}
}
}
เวอร์ชัน 3.0.1
เวอร์ชัน 3.0.1
21 กรกฎาคม 2021
androidx.paging:paging-*:3.0.1
ได้รับการปล่อยแล้ว เวอร์ชัน 3.0.1 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- การเข้าถึง
PagedList.dataSource
จากค่าเริ่มต้นที่เกิดจากLivePagedList
หรือRxPagedList
จะไม่แสดง IllegalStateException อย่างไม่ถูกต้องอีกต่อไป (I96707)
เวอร์ชัน 3.0.0
เวอร์ชัน 3.0.0
5 พฤษภาคม 2021
androidx.paging:paging-*:3.0.0
ได้รับการปล่อยแล้ว เวอร์ชัน 3.0.0 มีคอมมิตเหล่านี้
ฟีเจอร์หลักของ 3.0.0
เราได้เลิกใช้งาน API ส่วนใหญ่ที่มีอยู่จาก Paging 2.x.x แล้วเพื่อเปลี่ยนไปใช้ Paging 3 API ใหม่เพื่อปรับปรุงสิ่งต่อไปนี้
- การรองรับโคโริวทีนและ Flow ของ Kotlin อย่างเต็มรูปแบบ
- การสนับสนุนสำหรับการยกเลิก
- สถานะการโหลดและสัญญาณข้อผิดพลาดในตัว
- ฟังก์ชัน "ลองอีกครั้ง" + "รีเฟรช"
- คลาสย่อย DataSource ทั้ง 3 คลาสได้รวมกันเป็นคลาส PagingSource แบบรวม
- การเปลี่ยนรูปแบบหน้าเว็บที่กำหนดเอง ซึ่งรวมถึงการเปลี่ยนรูปแบบในตัวสำหรับการเพิ่มตัวคั่น
- กำลังโหลดส่วนหัวและส่วนท้ายสถานะ
เวอร์ชัน 3.0.0-rc01
21 เมษายน 2021
androidx.paging:paging-*:3.0.0-rc01
ได้รับการปล่อยแล้ว เวอร์ชัน 3.0.0-rc01 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่บางครั้งการแบ่งหน้าจะส่งเหตุการณ์ที่ไม่มีการดําเนินการไปยัง RecyclerView ซึ่งอาจทําให้ผู้ฟังบางรายทริกเกอร์ก่อนเวลาอันควร (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 ของDataSource
v2 ผ่านเส้นทางความเข้ากันได้ - ตอนนี้การเรียก
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 เพื่อทำเครื่องหมายถึงตอนจบการแบ่งหน้า แม้ว่าจะใช้ RemoteMediator ก็ตาม ซึ่งช่วยให้ส่วนหัวและส่วนท้ายแสดงพร้อมกันกับการโหลดครั้งแรก ซึ่งทำให้ผู้ใช้ไม่ต้องเลื่อนเพื่อดูตัวคั่นท้าย (Ibe993, b/174700218)
การแก้ไขข้อบกพร่อง
- แก้ไขการสูญเสียหน่วยความจำที่เกิดขึ้นไม่บ่อยนัก ซึ่งเกิดขึ้นเมื่อ PagingSource กลายเป็นโมฆะก่อนที่ PageFetcher จะเริ่มโหลดจาก PagingSource ดังกล่าว (I9606b, b/174625633)
เวอร์ชัน 3.0.0-alpha12
13 มกราคม 2021
androidx.paging:paging-*:3.0.0-alpha12
ได้รับการปล่อยแล้ว เวอร์ชัน 3.0.0-alpha12 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- InvalidatingPagingSourceFactory ไม่ใช่คลาสนามธรรมอีกต่อไปเนื่องจากไม่เคยมีเมธอดนามธรรม (I4a8c4)
- เพิ่ม .cachedIn() แบบโอเวอร์โหลดที่รับ ViewModel แทน Lifecycle หรือ CoroutineScope สำหรับผู้ใช้ Java (I97d81, b/175332619)
- อนุญาตให้ผู้เรียก Java ใช้การดำเนินการเปลี่ยนรูปแบบ PagingData ในลักษณะแบบแอสซิงค์โดยยอมรับ Executor ไว้ในอาร์กิวเมนต์ของโอเปอเรเตอร์การเปลี่ยนรูปแบบ ตอนนี้เราได้นําส่วนต่อท้าย -Sync ออกแล้วจากโอเปอเรเตอร์การเปลี่ยนรูปแบบ -Sync ทั้งหมด และผู้ใช้ Kotlin Coroutine จะต้องแยกแยะด้วยการเรียกใช้ฟังก์ชันการขยายที่ยอมรับบล็อกการระงับแทน
ระบบได้ย้ายโอเปอเรเตอร์การเปลี่ยนรูปแบบ PagingData ทั้งหมดไปยังส่วนขยายภายใต้คลาส PagingDataTransforms แบบคงที่ ผู้ใช้ Java จะต้องเรียกใช้ผ่านตัวช่วยแบบคงที่ เช่น
PagingDataTransforms.map(pagingData, transform)
สําหรับผู้ใช้ Kotlin รูปแบบคำสั่งจะเหมือนกัน แต่คุณจะต้องนําเข้าฟังก์ชัน (If6885, b/172895919)
การแก้ไขข้อบกพร่อง
- แก้ไขข้อบกพร่องที่
RemoteMediator.load()
จะไม่เรียกใช้ระหว่างadapter.refresh()
หากถึงส่วนท้ายของการแบ่งหน้าแล้ว
เวอร์ชัน 3.0.0-alpha11
16 ธันวาคม 2020
androidx.paging:paging-*:3.0.0-alpha11
ได้รับการปล่อยแล้ว เวอร์ชัน 3.0.0-alpha11 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- เพิ่มการรองรับสถานะที่บันทึกไว้สำหรับ Use Case พื้นฐานต่อไปนี้ (การรองรับอย่างเต็มรูปแบบโดยเฉพาะอย่างยิ่งใน Use Case ของแหล่งที่มาแบบเลเยอร์ยังอยู่ระหว่างดำเนินการ)
- ระบบแคชขั้นตอนไว้และไม่หยุดแอปพลิเคชัน (เช่น ระบบแคชขั้นตอนไว้ในโมเดลมุมมองและสร้างกิจกรรมขึ้นมาใหม่ในกระบวนการ)
- ระบบจะนับแหล่งที่มาของหน้าเว็บ เปิดใช้ตัวยึดตําแหน่ง และเลย์เอาต์ไม่ได้สลับ
การเปลี่ยนแปลง API
PagingSource.getRefreshKey()
เป็น API เวอร์ชันเสถียรแล้ว (I22f6f, b/173530980)PagingSource.invalidate
ไม่ใช่ฟังก์ชันแบบเปิดอีกต่อไป หากต้องการรับการแจ้งเตือนเมื่อเกิดการลบล้าง ให้ลองเรียกใช้เมธอด registerInvalidatedCallback แทนการลบล้างการลบล้าง (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
- แก้ไขข้อบกพร่องที่
.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
ที่เลิกใช้งานออกแล้วเนื่องจากมีการใช้งานซ้ำกับการอัปเดต loadStateFlow / Listener สําหรับผู้ที่ย้ายข้อมูลอยู่ รายการที่เทียบเท่า loadStateFlow คือloadStateFlow.distinctUntilChangedBy { it.refresh } .filter { it.refresh is NotLoading }
การแก้ไขข้อบกพร่อง
- ตอนนี้ endOfPaginationReached สำหรับ RemoteMediator
REFRESH
จะนำไปสู่การอัปเดต LoadState อย่างถูกต้อง และป้องกันไม่ให้APPEND
และPREPEND
ระยะไกลทริกเกอร์ (I94a3f, b/155290248) - การแสดงรายการว่างเนื่องจากหน้าแรกว่างเปล่าหรือการกรองที่หนักหน่วงจะไม่ป้องกันไม่ให้การแบ่งหน้าเริ่มโหลด
PREPEND
หรือAPPEND
อีกต่อไป (I3e702, b/168169730) - แก้ไขปัญหาที่
getRefreshKey
ไม่ได้รับการเรียกใช้ใน PagingSource รุ่นถัดไปเมื่อมีการทำให้เป็นโมฆะอย่างรวดเร็ว (I45460, b/170027530)
การมีส่วนร่วมจากภายนอก
- เพิ่มคลาสนามธรรมใหม่ 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 (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 ของคอลแบ็กที่ลบล้างหลังจากเปลี่ยนรูปแบบโดย.map
หรือ.mapByPage
ด้วย (I1f244, b/165313046)
การแก้ไขข้อบกพร่อง
- การโต้ตอบของการจัดเรียงหน้าเว็บกับ ViewPager ได้รับการปรับปรุงอย่างมาก กล่าวโดยละเอียดคือ Paging จะไม่ยกเลิกการเรียก
RemoteMediator#load
เนื่องจากการทำให้หน้าเว็บไม่ถูกต้องอีกต่อไป นอกจากนี้ ระบบจะไม่ส่งคําขอโหลดต่อท้าย/ต่อหน้าอีกหากจําเป็นต้องรีเฟรชจนกว่าคําขอรีเฟรชจะเสร็จสมบูรณ์ (I6390b, b/162252536) - เปิดใช้การตรวจสอบ Lint ของ API สําหรับ MissingGetterMatchingBuilder สําหรับ androidx (I4bbea, b/138602561)
- แก้ไขข้อบกพร่องที่ตัวช่วย
.withLoadState*
ConcatAdapter
จะขัดข้องเนื่องจากการแจ้งเตือน RecyclerView จากเธรดแบ็กกราวด์ (I18bb5, b/170988309) - แก้ไขข้อบกพร่องที่บางครั้งการโหลดหน้าเว็บขนาดเล็กมากซึ่งไม่ใช่หน้าว่างจะทําให้ระบบไม่เรียกใช้การโหลดล่วงหน้าอย่างถูกต้องIffda3 b/169259468
เวอร์ชัน 3.0.0-alpha07
1 ตุลาคม 2020
androidx.paging:paging-*:3.0.0-alpha07
ได้รับการปล่อยแล้ว เวอร์ชัน 3.0.0-alpha07 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- ตอนนี้โอเปอเรเตอร์ PagingData แบบไม่พร้อมกันที่อิงตาม Guava ยอมรับ Executor เป็นพารามิเตอร์เพื่อควบคุมบริบทการดําเนินการแล้ว (Id4372)
การแก้ไขข้อบกพร่อง
- แก้ไขข้อยกเว้น IndexOutOfBounds ที่แสดงใน RemoteMediator เนื่องจากเงื่อนไขการแข่งขัน (I00b7f, b/165821814)
- แก้ไขเงื่อนไขการแข่งขันในการแปลง DataSource -> PagingSource ซึ่งอาจทําให้ PagingSource ที่ได้ละเว้นสัญญาณการลบล้างจาก DataSource
- แก้ไขปัญหาในตรรกะการดึงข้อมูลหน้าเว็บที่บางครั้งทําให้ระบบเลือก PagingSource รุ่นใหม่ไม่ได้จนกว่าจะเรียกใช้ PagingDataAdapter.refresh()
- แก้ไขปัญหาที่บางครั้งจะทำให้ตำแหน่งการเลื่อนหายไปเมื่อใช้ DataSource ที่แปลงเป็น PagingSource (เช่น ข้อมูลที่ Room สร้างขึ้น) ร่วมกับ RemoteMediator
การมีส่วนร่วมจากภายนอก
- ขอขอบคุณ @simonschiller ที่เพิ่มโอเปอเรเตอร์การเปลี่ยนรูปแบบแบบแอ็กซิงทีคอลที่ใช้ RxJava2, RxJava3 และ Guava สำหรับ PagingData
เวอร์ชัน 3.0.0-alpha06
2 กันยายน 2020
androidx.paging:paging-*:3.0.0-alpha06
ได้รับการปล่อยแล้ว เวอร์ชัน 3.0.0-alpha06 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
UnsupportedOperationException
พร้อมข้อความที่ชัดเจนขึ้นเกี่ยวกับการไม่รองรับรหัสที่เสถียร ตอนนี้ระบบจะแสดงข้อผิดพลาดทุกครั้งที่มีการเรียกใช้PagingDataAdapter.setHasStableIds
(Ib3890, b/158801427)
การแก้ไขข้อบกพร่อง
- insertSeparators จะไม่กรองหน้าว่างออกอีกต่อไป ซึ่งจะช่วยให้ผู้นำเสนอใช้ระยะการเรียกข้อมูลล่วงหน้าได้แม้ในกรณีที่มีการแทรกหน้าว่างหลายหน้า (I9cff6, b/162538908)
เวอร์ชัน 3.0.0-alpha05
19 สิงหาคม 2020
androidx.paging:paging-*:3.0.0-alpha05
ได้รับการปล่อยแล้ว เวอร์ชัน 3.0.0-alpha05 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- ตอนนี้การแบ่งหน้าจะโหลดหน้าเว็บล่วงหน้าอย่างถูกต้องแม้ว่าข้อมูลที่จะแสดงจะกรองอย่างหนักก็ตาม
- การเปลี่ยน
LoadResult.Error
เป็นการโหลดที่ลองใหม่จะไม่ทริกเกอร์การเข้าถึงรายการให้ลองใหม่อย่างไม่ถูกต้องอีกต่อไป
การมีส่วนร่วมจากภายนอก
- ขอขอบคุณ Clara F ที่ช่วยแก้ไขการทดสอบ (549612)
เวอร์ชัน 3.0.0-alpha04
5 สิงหาคม 2020
androidx.paging:paging-*:3.0.0-alpha04
ได้รับการปล่อยแล้ว เวอร์ชัน 3.0.0-alpha04 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- เพิ่ม
peek()
API ลงในAsyncPagingDataDiffer
และPagingDataAdapter
เพื่ออนุญาตให้เข้าถึงข้อมูลที่แสดงโดยไม่ต้องทริกเกอร์การโหลดหน้าเว็บ (I38898, b/159104197) - เพิ่ม
snapshot()
API ลงในPagingDataAdapter
และAsyncPagingDataDiffer
เพื่ออนุญาตให้ดึงข้อมูลรายการที่แสดงโดยไม่ทริกเกอร์การดึงข้อมูลหน้าเว็บ (I566b6, b/159104197) - เพิ่มคอนสตรัคเตอร์
PagingData.from(List<T>)
เพื่ออนุญาตให้แสดงรายการแบบคงที่ ซึ่งสามารถรวมเข้ากับการไหลเวียนข้อมูลโดยรวมของ PagingData เพื่อแสดงรายการแบบคงที่ในบางสถานะ เช่น ก่อนการรีเฟรชครั้งแรกเสร็จสิ้น หรือเพียงแค่เพื่อทดสอบการเปลี่ยนรูปแบบ (Id134d) - เลิกใช้งาน DataRefresh Flow / Listener API เนื่องจากมีไว้เพื่อแสดงสถานะของรายการที่แสดงเมื่อรีเฟรช แต่การปรับปรุงลําดับเวลาการเรียกกลับของ loadState Flow / Listener และพร็อพเพอร์ตี้ itemCount ทำให้ API นี้ซ้ำซ้อน (Ia19f3)
- เพิ่ม Wrapper ที่เข้ากันได้กับ RxJava3 สําหรับ
PagingSource
และRemoteMediator
(I49ef3, b/161480176)
การแก้ไขข้อบกพร่อง
PositionalDataSource
ที่แปลงเป็นPagingSource
ผ่านตัวช่วยtoPagingSourceFactory
รวมถึงPagingSource
ที่ Room สร้างขึ้น ตอนนี้จะทําเครื่องหมายตัวเองอย่างถูกต้องเพื่อรองรับการข้าม (I3e84c, b/162161201)- แก้ไขข้อบกพร่องที่บางครั้งการใช้ตัวแปรแบบซิงค์ของ submitData จะทําให้เกิดความผิดพลาดที่ทำให้เกิด
ClosedSendChannelException
(I4d702, b/160192222)
การมีส่วนร่วมจากภายนอก
- ขอขอบคุณ Zac Sweers ที่เพิ่ม Wrapper ที่เข้ากันได้กับ RxJava3 ในนามของ Slack (I49ef3, b/161480176)
เวอร์ชัน 3.0.0-alpha03
22 กรกฎาคม 2020
androidx.paging:paging-*:3.0.0-alpha03
ได้รับการปล่อยแล้ว เวอร์ชัน 3.0.0-alpha03 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- ตอนนี้ตัวสร้างของ PagingState เป็นสาธารณะแล้ว ซึ่งน่าจะทําให้การทดสอบการติดตั้งใช้งาน getRefreshKey() ง่ายขึ้น (I8bf15)
- ซ่อนตัวแปรฟังก์ชันการแมป kotlin ของ DataSource จาก Java เพื่อแก้ไขความคลุมเครือระหว่างตัวแปรเดิมกับตัวแปร Kotlin (If7b23, b/161150011)
- API ซ้ำซ้อนที่มีไว้เพื่ออำนวยความสะดวกให้ผู้ใช้ Kotlin ได้รับการทําเครื่องหมาย @JvmSynthetic แล้ว (I56ae5)
- เพิ่มการโอเวอร์โหลดสําหรับตัวสร้างของ LoadResult.Page ซึ่งตั้งค่าเริ่มต้น itemsBefore และ itemsAfter เป็น COUNT_UNDEFINED (I47849)
- ทำให้โอเปอเรเตอร์ PagingData ที่มีอยู่ยอมรับเมธอดที่ระงับการทำงาน และเปิดตัวโอเปอเรเตอร์ mapSync, flatMapSync และ filterSync ที่ไม่ระงับการทำงานแบบใหม่สำหรับผู้ใช้ Java เราได้ย้ายเมธอดการเปลี่ยนรูปแบบที่มีอยู่ไปยังฟังก์ชันส่วนขยายแล้ว ดังนั้นตอนนี้ผู้ใช้ Kotlin จะต้องนำเข้าเมธอดเหล่านั้น (I34239, b/159983232)
การแก้ไขข้อบกพร่อง
- ตอนนี้ 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) - เพิ่ม RxJava และ Guava API สําหรับ RemoteMediator - RxRemoteMediator และ ListenableFutureRemoteMediator
- เพิ่มตัวช่วยลงใน PagingState สำหรับการเข้าถึงรายการทั่วไป เช่น
isEmpty()
และfirstItemOrNull()
(I3b5b6, b/158892717)
การแก้ไขข้อบกพร่อง
- ตอนนี้ Pager จะตรวจสอบการนํา PagingSource มาใช้ซ้ำในโรงงานเพื่อป้องกันการใช้ PagingSource ที่ไม่ถูกต้องซ้ำโดยไม่ตั้งใจ ซึ่งทำให้เกิดข้อผิดพลาดที่ไม่ชัดเจน (I99809, b/158486430)
- ความล้มเหลวจาก REFRESH ของ RemoteMediator จะไม่ป้องกันไม่ให้ PagingSource โหลดอีกต่อไป (I38b1b, b/158892717)
submitData
เวอร์ชันที่ไม่ระงับจะไม่ทําให้เกิดความขัดข้องอีกต่อไปเนื่องจากการรวบรวมพร้อมกันในsubmitData
หลายรายการเมื่อเรียกใช้หลังจากsubmitData
เวอร์ชันที่ระงับPagingData
(I26358, b/158048877)- แก้ไขข้อยกเว้น "ไม่สามารถรวบรวมข้อมูลจาก pager ได้ 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
- การรองรับโคโริวทีนและ Flow ของ Kotlin อย่างเต็มรูปแบบ
- รองรับการโหลดแบบอะซิงโครนัสด้วยฟังก์ชันการระงับ coroutine, พรอมต์พื้นฐาน RxJava Single หรือ Guava ListenableFuture
- สถานะการโหลดและสัญญาณข้อผิดพลาดในตัวสําหรับการออกแบบ UI แบบตอบสนอง รวมถึงฟังก์ชันการลองอีกครั้งและการรีเฟรช
- การปรับปรุงเลเยอร์ที่เก็บข้อมูล
- อินเทอร์เฟซแหล่งข้อมูลที่เข้าใจง่าย
- การแบ่งหน้าเครือข่ายและฐานข้อมูลที่เรียบง่าย
- การสนับสนุนเกี่ยวกับการยกเลิก
- การปรับปรุงเลเยอร์การนำเสนอ
ปัญหาที่ทราบ
- ยังไม่มี Javadoc ของหน้าเว็บรุ่นที่ 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
การแบ่งหน้า 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()
ซึ่งใช้การเรียกกลับเพิ่มเติมที่จะทริกเกอร์หาก/เมื่อรายการแบบแบ่งหน้าแสดงขึ้นหลังจากการเปรียบเทียบ ซึ่งช่วยให้คุณซิงค์การแลกเปลี่ยน 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 ที่ตามมา ให้ใส่การพึ่งพาต่อไปนี้
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
เพื่อความมั่นคง Paging 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 นั้นสูงมาก
การรองรับ 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 Componentsแก้ไขลักษณะการทำงานที่ไม่ถูกต้องใน
DataSource
Wrapper ภายใน (ใช้เพื่อติดตั้งใช้งานDataSource.map
รวมถึงการโหลดPositionalDataSource
ที่ปิดใช้ตัวยึดตําแหน่ง) b/77237534
เวอร์ชัน 1.0.0-alpha7
21 มีนาคม 2018
การแบ่งหน้า 1.0.0-alpha7
จะเปิดตัวพร้อมกับวงจรของลูกค้า 1.1.1
เนื่องจาก Paging alpha7 ขึ้นอยู่กับการย้ายคลาส Function
ที่กล่าวถึงข้างต้น คุณจึงต้องอัปเดต Dependency ของ lifecycle:runtime
เป็น android.arch.lifecycle:runtime:1.1.1
Paging alpha7
มีแผนที่จะเป็นรุ่นสุดท้ายก่อน Paging จะเข้าสู่รุ่นเบต้า
การเปลี่ยนแปลง API
- ตอนนี้ออบเจ็กต์
DataSource.LoadParams
มีคอนสตรัคเตอร์แบบสาธารณะ และออบเจ็กต์DataSource.LoadCallback
เป็นแบบนามธรรม ซึ่งช่วยให้สามารถรวมDataSource
หรือทดสอบDataSource
โดยตรงด้วยการเรียกกลับจำลองได้ b/72600421 - ตัวแมปสําหรับ 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 เป็นเวอร์ชันสุดท้ายแล้ว 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