ภาพรวมไลบรารีการแบ่งหน้า   เป็นส่วนหนึ่งของ Android Jetpack

ไลบรารีการแบ่งหน้าช่วยให้คุณโหลดและแสดงหน้าข้อมูลจากชุดข้อมูลที่ใหญ่ขึ้นจากพื้นที่เก็บข้อมูลในเครื่องหรือผ่านเครือข่าย แนวทางนี้ช่วยให้แอปใช้ทั้งแบนด์วิดท์เครือข่ายและทรัพยากรของระบบได้อย่างมีประสิทธิภาพมากขึ้น คอมโพเนนต์ของไลบรารี Paging ออกแบบมาให้เข้ากับสถาปัตยกรรมแอป Android ที่แนะนำ ผสานรวมกับคอมโพเนนต์ Jetpack อื่นๆ ได้อย่างราบรื่น และให้การสนับสนุน Kotlin ได้อย่างยอดเยี่ยม

ประโยชน์ของการใช้ไลบรารีการแบ่งหน้า

คลังการแบ่งหน้ามีฟีเจอร์ต่อไปนี้

  • การแคชในหน่วยความจําสําหรับข้อมูลที่แบ่งหน้า วิธีนี้ช่วยให้แอปใช้ทรัพยากรของระบบได้อย่างมีประสิทธิภาพขณะทำงานกับข้อมูลที่แบ่งหน้า
  • การกรองข้อมูลคำขอที่ซ้ำกันในตัว ซึ่งช่วยให้มั่นใจได้ว่าแอปของคุณใช้แบนด์วิดท์ของเครือข่ายและทรัพยากรของระบบอย่างมีประสิทธิภาพ
  • อะแดปเตอร์ RecyclerView ที่กําหนดค่าได้ซึ่งจะขอข้อมูลโดยอัตโนมัติเมื่อผู้ใช้เลื่อนไปยังส่วนท้ายของข้อมูลที่โหลด
  • การรองรับโคโริวทีนและโฟลว์ของ Kotlin ระดับพรีเมียม รวมถึง LiveData และ RxJava
  • การรองรับการจัดการข้อผิดพลาดในตัว รวมถึงความสามารถในการรีเฟรชและลองอีกครั้ง

แสดงความคิดเห็น

ความคิดเห็นของคุณช่วยปรับปรุง Jetpack ได้ โปรดแจ้งให้เราทราบหากพบปัญหาใหม่หรือมีแนวคิดในการปรับปรุงคลังนี้ โปรดตรวจสอบปัญหาที่มีอยู่ของคลังนี้ก่อนสร้างคลังใหม่ คุณสามารถเพิ่มการโหวตให้กับปัญหาที่มีอยู่ได้โดยคลิกปุ่มดาว

สร้างปัญหาใหม่

ดูข้อมูลเพิ่มเติมเกี่ยวกับการส่งความคิดเห็นได้ในเอกสารประกอบของเครื่องมือติดตามปัญหา

ตั้งค่า

หากต้องการนําเข้าคอมโพเนนต์การแบ่งหน้าลงในแอป Android ให้เพิ่มข้อกําหนดต่อไปนี้ลงในไฟล์ 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")
}

สถาปัตยกรรมของไลบรารี

คอมโพเนนต์ของไลบรารีการแบ่งหน้าจะทํางานใน 3 เลเยอร์ของแอป ดังนี้

  • เลเยอร์ที่เก็บ
  • เลเยอร์ ViewModel
  • ชั้น UI
รูปภาพแสดงการไหลของข้อมูลที่แบ่งหน้าจากคอมโพเนนต์ PagingSource หรือ RemoteMediator ในเลเยอร์รีโพซิทอรีไปยังคอมโพเนนต์ Pager ในเลเยอร์ ViewModel
    จากนั้นคอมโพเนนต์ Pager จะแสดงโฟลว์ของ PagingData ไปยัง PagingDataAdapter ในเลเยอร์ UI
รูปที่ 1 ตัวอย่างวิธีที่ไลบรารีการแบ่งหน้าเข้ากับสถาปัตยกรรมของแอป

ส่วนนี้จะอธิบายคอมโพเนนต์ของไลบรารีการแบ่งหน้าเว็บที่ทำงานในแต่ละเลเยอร์ และวิธีที่คอมโพเนนต์เหล่านี้ทํางานร่วมกันเพื่อโหลดและแสดงข้อมูลที่แบ่งหน้า

เลเยอร์ที่เก็บ

คอมโพเนนต์ไลบรารีการแบ่งหน้าหลักในเลเยอร์พื้นที่เก็บข้อมูลคือ PagingSource ออบเจ็กต์ PagingSource แต่ละรายการจะกำหนดแหล่งที่มาของข้อมูลและวิธีเรียกข้อมูลจากแหล่งที่มานั้น ออบเจ็กต์ PagingSource สามารถโหลดข้อมูลจากแหล่งที่มาแหล่งเดียวได้ ซึ่งรวมถึงแหล่งที่มาของเครือข่ายและฐานข้อมูลในเครื่อง

คอมโพเนนต์ไลบรารีการแบ่งหน้าอีกรายการที่คุณอาจใช้คือ RemoteMediator ออบเจ็กต์ RemoteMediator จะจัดการการแบ่งหน้าจากแหล่งข้อมูลแบบเลเยอร์ เช่น แหล่งข้อมูลเครือข่ายที่มีแคชฐานข้อมูลในเครื่อง

เลเยอร์ ViewModel

คอมโพเนนต์ Pager มี API สาธารณะสำหรับสร้างอินสแตนซ์ของ PagingData ที่แสดงในสตรีมแบบรีแอ็กทีฟ โดยอิงตามออบเจ็กต์ PagingSource และออบเจ็กต์การกําหนดค่า PagingConfig

คอมโพเนนต์ที่เชื่อมต่อเลเยอร์ ViewModel กับ UI คือ PagingData ออบเจ็กต์ PagingData คือคอนเทนเนอร์สำหรับภาพรวมของข้อมูลที่แบ่งหน้า โดยจะค้นหาออบเจ็กต์ PagingSource และจัดเก็บผลลัพธ์

เลเยอร์ UI

คอมโพเนนต์ไลบรารีการแบ่งหน้าหลักในเลเยอร์ UI คือ PagingDataAdapter ซึ่งเป็นอะแดปเตอร์ RecyclerView ที่จัดการข้อมูลแบบแบ่งหน้า

หรือจะใช้คอมโพเนนต์ AsyncPagingDataDiffer ที่ให้มาเพื่อสร้างอะแดปเตอร์ที่กำหนดเองของคุณเองก็ได้

แหล่งข้อมูลเพิ่มเติม

ดูข้อมูลเพิ่มเติมเกี่ยวกับไลบรารีการแบ่งหน้าได้ที่แหล่งข้อมูลเพิ่มเติมต่อไปนี้

Codelabs