ภาพรวมของไลบรารี Paging เป็นส่วนหนึ่งของ Android Jetpack
ไลบรารี Paging ช่วยให้คุณโหลดและแสดงหน้าข้อมูลจากชุดข้อมูลขนาดใหญ่จากพื้นที่เก็บข้อมูลในเครื่องหรือผ่านเครือข่ายได้ วิธีนี้ช่วยให้แอปใช้ทั้งแบนด์วิดท์เครือข่ายและทรัพยากรระบบได้อย่างมีประสิทธิภาพมากขึ้น คอมโพเนนต์ของไลบรารี Paging ได้รับการออกแบบมาให้เหมาะกับสถาปัตยกรรมแอป Android ที่แนะนำ ผสานรวมกับคอมโพเนนต์ Jetpack อื่นๆ ได้อย่างราบรื่น และรองรับ Kotlin ระดับเฟิร์สคลาส
ประโยชน์ของการใช้ไลบรารี Paging
ไลบรารีเพจจิ้งมีฟีเจอร์ต่อไปนี้
- การแคชในหน่วยความจำสำหรับข้อมูลที่มีการแบ่งหน้า ซึ่งจะช่วยให้มั่นใจได้ว่าแอปจะใช้ทรัพยากรระบบอย่างมีประสิทธิภาพขณะทำงานกับข้อมูลที่มีการแบ่งหน้า
- การกรองคำขอที่ซ้ำกันออกในตัว ซึ่งช่วยให้มั่นใจได้ว่าแอปของคุณใช้แบนด์วิดท์เครือข่ายและทรัพยากรระบบอย่างมีประสิทธิภาพ
- การรองรับระดับเฟิร์สคลาสสำหรับโครูทีนและโฟลว์ของ Kotlin
- การรองรับการจัดการข้อผิดพลาดในตัว รวมถึงความสามารถในการรีเฟรชและลองใหม่
ตั้งค่า
หากต้องการนำเข้าคอมโพเนนต์ Paging ไปยังแอป Android ให้เพิ่มทรัพยากร Dependency ต่อไปนี้ลงในไฟล์ build.gradle ของแอป
Kotlin
dependencies { val paging_version = "3.4.2" implementation("androidx.paging:paging-common:$paging_version") // Jetpack Compose integration implementation("androidx.paging:paging-compose:$paging_version") }
ดึงดูด
dependencies { def paging_version = "3.4.2" implementation "androidx.paging:paging-common:$paging_version" // Jetpack Compose integration implementation "androidx.paging:paging-compose:$paging_version" }
สถาปัตยกรรมห้องสมุด
คอมโพเนนต์ของไลบรารีการแบ่งหน้าจะทำงานใน 3 เลเยอร์ของแอป ดังนี้
- เลเยอร์ที่เก็บข้อมูล
- เลเยอร์
ViewModel - เลเยอร์ UI
ส่วนนี้จะอธิบายคอมโพเนนต์ของไลบรารี Paging ซึ่งทำงานในแต่ละชั้น และวิธีที่คอมโพเนนต์เหล่านี้ทำงานร่วมกันเพื่อโหลดและแสดงข้อมูลที่มีการแบ่งหน้า
เลเยอร์ที่เก็บ
คอมโพเนนต์หลักของไลบรารีเพจจิ้งในเลเยอร์ที่เก็บคือ PagingSource ออบเจ็กต์ PagingSource แต่ละรายการจะกำหนดแหล่งที่มาของข้อมูลและวิธีดึงข้อมูลจากแหล่งที่มานั้น ออบเจ็กต์ PagingSource สามารถโหลดข้อมูลจากแหล่งที่มาเดียวได้ ซึ่งรวมถึงแหล่งที่มาของเครือข่ายและฐานข้อมูลในเครื่อง
คอมโพเนนต์ไลบรารีการแบ่งหน้าอีกรายการที่คุณอาจใช้คือ RemoteMediator ออบเจ็กต์ RemoteMediator จะจัดการการแบ่งหน้าจากแหล่งข้อมูลแบบเลเยอร์ เช่น แหล่งข้อมูลเครือข่ายที่มีแคชฐานข้อมูลในเครื่อง
เลเยอร์ ViewModel
คอมโพเนนต์ Pager มี API สาธารณะสำหรับสร้างอินสแตนซ์ของ PagingData ที่แสดงในสตรีมแบบรีแอ็กทีฟ โดยอิงตามออบเจ็กต์ PagingSource และออบเจ็กต์การกำหนดค่า PagingConfig
คอมโพเนนต์ที่เชื่อมต่อเลเยอร์ ViewModel กับ UI คือ PagingData ออบเจ็กต์ PagingData
คือคอนเทนเนอร์สำหรับภาพรวมของข้อมูลที่มีการแบ่งหน้า โดยจะค้นหาออบเจ็กต์ PagingSource และจัดเก็บผลลัพธ์
เลเยอร์ UI
API ของ UI การแบ่งหน้าหลักคือ collectAsLazyPagingItems() โดยจะแสดงรายการที่มีการแบ่งหน้าเป็นรายการข้อมูลที่คอมโพเนนต์เลย์เอาต์แบบ Lazy ของ Compose สามารถนำไปใช้ได้อย่างง่ายดาย เช่น LazyColumn และ LazyRow
เพิ่มไลบรารี androidx.paging:paging-compose เพื่อใช้ API ที่เข้ากันได้กับ Compose ซึ่งช่วยให้ UI ตอบสนองต่อการโหลดข้อมูล การอัปเดต และข้อผิดพลาดโดยอัตโนมัติ โดยไม่ต้องใช้อะแดปเตอร์หรือตรรกะการเปรียบเทียบความแตกต่าง ใช้ฟังก์ชันส่วนขยาย collectAsLazyPagingItems() ใน Flow<PagingData> เพื่อส่ง LazyPagingItems ที่แสดงผลไปยัง items() ใน LazyColumn
@Composable fun MessageList(pager: Pager<Int, Message>) { val lazyPagingItems = pager.flow.collectAsLazyPagingItems() LazyColumn { items( lazyPagingItems.itemCount, key = lazyPagingItems.itemKey { it.id } ) { index -> val message = lazyPagingItems[index] if (message != null) { MessageRow(message) } else { MessagePlaceholder() } } } }
ดูข้อมูลเพิ่มเติมได้ที่ชุดข้อมูลขนาดใหญ่ (การแบ่งหน้า)
แนะนำสำหรับคุณ
- หมายเหตุ: ข้อความลิงก์จะแสดงเมื่อ JavaScript ปิดอยู่
- โหลดและแสดงข้อมูลแบบแบ่งหน้า
- ย้ายข้อมูลไปยัง Paging 3
- หน้าเว็บจากเครือข่ายและฐานข้อมูล