ภาพรวมไลบรารี Paging ส่วนหนึ่งของ Android Jetpack
Paging Library ช่วยให้คุณโหลดและแสดงหน้าข้อมูลจากชุดข้อมูลขนาดใหญ่ จากพื้นที่เก็บข้อมูลในเครื่องหรือผ่านเครือข่ายได้ แนวทางนี้ช่วยให้แอปใช้ ทั้งแบนด์วิดท์เครือข่ายและทรัพยากรของระบบได้อย่างมีประสิทธิภาพมากขึ้น คอมโพเนนต์ของ ไลบรารี Paging ออกแบบมาให้เหมาะกับสถาปัตยกรรม แอป Android ที่แนะนำ ผสานรวมกับคอมโพเนนต์ Jetpack อื่นๆ ได้อย่างราบรื่น และรองรับ Kotlin ระดับเฟิร์สคลาส
สิทธิประโยชน์ของการใช้ไลบรารีการแบ่งหน้า
ไลบรารีการแบ่งหน้ามีฟีเจอร์ต่อไปนี้
- การแคชในหน่วยความจำสำหรับข้อมูลที่แบ่งหน้า ซึ่งจะช่วยให้มั่นใจได้ว่าแอปจะใช้ ทรัพยากรของระบบอย่างมีประสิทธิภาพขณะทำงานกับข้อมูลที่แบ่งเป็นหน้า
- การขจัดคำขอที่ซ้ำกันในตัว ซึ่งช่วยให้มั่นใจได้ว่าแอปจะใช้แบนด์วิดท์เครือข่าย และทรัพยากรของระบบอย่างมีประสิทธิภาพ
- การรองรับโครูทีนและโฟลว์ของ 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" }
สถาปัตยกรรมของคลัง
คอมโพเนนต์ของ Paging Library ทำงานใน 3 เลเยอร์ของแอป
- เลเยอร์ที่เก็บ
- เลเยอร์
ViewModel - เลเยอร์ UI
ส่วนนี้จะอธิบายคอมโพเนนต์ของไลบรารีการแบ่งหน้าซึ่งทำงานในแต่ละเลเยอร์ และวิธีที่คอมโพเนนต์เหล่านี้ทำงานร่วมกันเพื่อโหลดและแสดงข้อมูลที่แบ่งหน้า
เลเยอร์ที่เก็บ
คอมโพเนนต์หลักของ Paging Library ในเลเยอร์ที่เก็บข้อมูลคือ
PagingSource ออบเจ็กต์ PagingSource แต่ละรายการจะกำหนดแหล่งข้อมูลและวิธีกู้ข้อมูลจากแหล่งข้อมูลนั้น PagingSource ออบเจ็กต์สามารถโหลดข้อมูลจากแหล่งข้อมูลเดียว
รวมถึงแหล่งข้อมูลเครือข่ายและฐานข้อมูลในเครื่อง
คอมโพเนนต์ไลบรารีการแบ่งหน้าอีกรายการที่คุณอาจใช้คือ
RemoteMediator ออบเจ็กต์ A
RemoteMediator จัดการการแบ่งหน้าจากแหล่งข้อมูลแบบเลเยอร์ เช่น แหล่งข้อมูลเครือข่ายที่มีแคชฐานข้อมูลในเครื่อง
เลเยอร์ ViewModel
คอมโพเนนต์ Pager มี
API สาธารณะสําหรับสร้างอินสแตนซ์ของ PagingData ที่แสดงใน
สตรีมแบบรีแอ็กทีฟ โดยอิงตามออบเจ็กต์ PagingSource และออบเจ็กต์การกําหนดค่า PagingConfig
คอมโพเนนต์ที่เชื่อมต่อเลเยอร์ ViewModel กับ UI คือ
PagingData PagingData
ออบเจ็กต์คือคอนเทนเนอร์สำหรับสแนปชอตของข้อมูลที่แบ่งหน้า โดยจะค้นหาออบเจ็กต์ a
PagingSource และ
จัดเก็บผลลัพธ์
เลเยอร์ UI
API ของ Paging UI หลักคือ collectAsLazyPagingItems() โดยจะแสดงรายการที่แบ่งหน้าเป็นรายการข้อมูลที่คอมโพสสามารถใช้คอมโพเนนต์เลย์เอาต์แบบเลซี เช่น 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
- หน้าจากเครือข่ายและฐานข้อมูล