เพจจิ้ง
ไลบรารีเพจจิ้งช่วยให้คุณโหลดข้อมูลอย่างค่อยเป็นค่อยไปและราบรื่นภายใน RecyclerView ของแอปได้ง่ายขึ้น

ตารางนี้แสดงอาร์ติแฟกต์ทั้งหมดในกลุ่ม androidx.paging

อาร์ติแฟกต์ รุ่นที่เสถียร รุ่นที่อาจได้รับการเผยแพร่ รุ่นเบต้า รุ่นอัลฟ่า
paging-* 3.5.3 - - -
paging-compose 3.5.3 - - -
อัปเดตคลังนี้ครั้งล่าสุดเมื่อวันที่ 12 ตุลาคม 2026

การประกาศทรัพยากร Dependency

หากต้องการเพิ่มทรัพยากร Dependency ในเพจจิ้ง คุณต้องเพิ่มที่เก็บ Maven ของ Google ลงในโปรเจ็กต์ อ่านข้อมูลเพิ่มเติมได้ที่ที่เก็บ Maven ของ Google

เพิ่มทรัพยากร Dependency สำหรับอาร์ติแฟกต์ที่ต้องการในไฟล์ build.gradle สำหรับแอปหรือโมดูล ดังนี้

Groovy

dependencies {
  def paging_version = "3.5.3"

  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.5.3"
}

Kotlin

dependencies {
  val paging_version = "3.5.3"

  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.5.3")
}

ดูข้อมูลเกี่ยวกับการใช้ส่วนขยาย Kotlin ได้ที่เอกสารประกอบ ktx

ดูข้อมูลเพิ่มเติมเกี่ยวกับ Dependency ได้ที่เพิ่ม Dependency ของบิลด์

ความคิดเห็น

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

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

ดูข้อมูลเพิ่มเติมได้ที่เอกสารประกอบของ Issue Tracker

เวอร์ชัน 3.5

เวอร์ชัน 3.5.3

12 ตุลาคม 2026

androidx.paging:paging-*:3.5.3 เปิดตัวแล้ว เวอร์ชัน 3.5.3 มี คอมมิตเหล่านี้

การแก้ไขข้อบกพร่อง

  • ItemSnapshotListFlow จะไม่แสดง IllegalArgumentException อีกต่อไปเมื่อ RemoteMediator ไปถึงจุดสิ้นสุดของการแบ่งหน้าในทิศทางใดทิศทางหนึ่ง และส่วนหัวหรือส่วนท้ายถูกแปลงเป็นตัวคั่นเทอร์มินัล (I821c7, b/566336825)
  • เมื่อหน้าเว็บที่โหลดเกิน PagingConfig.maxSize หน้าเว็บที่โหลดจะไม่ลดลงต่ำกว่า 2 หน้าเพื่อให้มั่นใจว่า Viewport จะมีข้อมูลอย่างเหมาะสม (I037a0, b/565835910)

การมีส่วนร่วมภายนอก

ขอขอบคุณ Igor ที่ส่งการแก้ไขข้อบกพร่อง b/565835910

เวอร์ชัน 3.5.2

7 ตุลาคม 2026

androidx.paging:paging-*:3.5.2 เปิดตัวแล้ว เวอร์ชัน 3.5.2 มีคอมมิตเหล่านี้

การแก้ไขข้อบกพร่อง

  • Pager.append() การเรียกใช้ก่อนการรีเฟรชครั้งแรกเสร็จสมบูรณ์จะไม่ทำให้เกิดข้อผิดพลาด NoSuchElementException อีกต่อไป การเรียกใช้เมธอด append จะไม่มีผลใดๆ (Ide387, b/556780796)

เวอร์ชัน 3.5.1

12 สิงหาคม 2569

androidx.paging:paging-*:3.5.1 เปิดตัวแล้ว เวอร์ชัน 3.5.1 มี คอมมิตเหล่านี้

แก้ไขข้อบกพร่อง

  • แก้ไขปัญหาที่ PagingSource.getRefreshKey แสดง anchorPosition ที่ไม่ถูกต้องซึ่งมีขนาดใหญ่เกินไปเมื่อรีเฟรชหน้าเว็บที่มีตัวคั่นขณะเลื่อนไปยังตัวยึดตำแหน่ง (I475f0, b/516565503)

เวอร์ชัน 3.5.0

6 พฤษภาคม 2026

androidx.paging:paging-*:3.5.0 เปิดตัวแล้ว เวอร์ชัน 3.5.0 มีการคอมมิตเหล่านี้

การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 3.4.0:

  • เพิ่มโอเปอเรเตอร์ Flow<PagingData>.asItemSnapshotListFlow เพื่อแปลง Flow<PagingData> เป็น Flow<ItemSnapshotList> ซึ่งหมายความว่าตอนนี้คุณสามารถเข้าถึงข้อมูลที่โหลดแล้วได้นอกเลเยอร์ UI ซึ่งจะช่วยให้คุณรวม Flow<ItemSnapshotList> กับแหล่งข้อมูลอื่นๆ แคชและแก้ไขข้อมูลที่แบ่งหน้าในเครื่อง หรือแสดงข้อมูลที่แบ่งหน้าเป็นส่วนหนึ่งของสถานะ UI และอื่นๆ ได้

  • เพิ่มฟังก์ชันส่วนขยาย Pager.append และ Pager.prepend เพื่อโหลดข้อมูลเพิ่มเติมด้วยตนเองโดยไม่ต้องเลื่อน

  • เพิ่มฟังก์ชันส่วนขยาย Pager.refresh และ Paging.retry เพื่อกู้คืนจากข้อผิดพลาดในการโหลดเมื่อใช้ asItemSnapshotListFlow API

เวอร์ชัน 3.5.0-rc01

22 เมษายน 2026

androidx.paging:paging-*:3.5.0-rc01 เปิดตัวแล้ว เวอร์ชัน 3.5.0-rc01 มีการเปลี่ยนแปลงเหล่านี้

ไม่มีการเปลี่ยนแปลง

  • ไม่มีการเปลี่ยนแปลงที่สำคัญจากเวอร์ชัน 3.5.0-beta01

เวอร์ชัน 3.5.0-beta01

8 เมษายน 2026

androidx.paging:paging-*:3.5.0-beta01 เปิดตัวแล้ว เวอร์ชัน 3.5.0-beta01 มีการเปลี่ยนแปลงเหล่านี้

การเปลี่ยนแปลง API

  • เราได้เปลี่ยนชื่อ Flow<PagingData>.asState API เป็น Flow<PagingData>.asItemSnapshotListFlow (I0dc11, b/496548025)

เวอร์ชัน 3.5.0-alpha01

11 มีนาคม 2026

androidx.paging:paging-*:3.5.0-alpha01 เปิดตัวแล้ว เวอร์ชัน 3.5.0-alpha01 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • ตอนนี้อาร์ติแฟกต์ paging-common มีโอเปอเรเตอร์โฟลว์ asState ใหม่ใน Flow<PagingData> เพื่อแปลงเป็น Flow<ItemSnapshotList> ซึ่งจะปลดล็อกความสามารถต่างๆ เช่น

    • รวม Flow ของ ItemSnapshotList กับแหล่งข้อมูลอื่นๆ
    • แชร์ขั้นตอนกับผู้รวบรวมหลายรายโดยไม่มี cachedIn
    • แคชข้อมูลที่มีการแบ่งหน้าไว้ในเครื่อง
    • แก้ไขข้อมูลที่มีการแบ่งหน้าในหน่วยความจำ
    • แสดงข้อมูลที่แบ่งหน้าเป็นส่วนหนึ่งของสถานะ UI
    // In your ViewModel
    val pager = Pager(pagingConfig, pagingSourceFactory)
    val pagerFlow = pager.flow.asState()
    
    // alterantively convert the flow to a SharedFlow
    val pagerFlow = pager.flow.asState().stateIn()
    
    // In presenter layer
    val snapshotFlow = viewModel.pagerFlow.collectAsStateWithLifecycle(initialList)
    val snapshot = itemsFlow.value
    
    LazyColumn {
    items(items = snapshot.items) { ... }
    }
    
  • อาร์ติแฟกต์ paging-common ยังเพิ่ม API Pager.append และ Pager.prepend เพื่อทริกเกอร์การโหลดที่ขอบด้านใดด้านหนึ่งของรายการที่โหลดด้วยตนเอง

    • เมื่อใช้กับ paging-runtime หรือ paging-compose จะเป็นทางเลือกในการโหลดข้อมูลเพิ่มเติม นอกเหนือจากการเลื่อน
    • เมื่อใช้กับ asState API ใหม่ จะเป็นวิธีเดียวในการโหลดข้อมูลเพิ่มเติม
    LazyColumn {
    item {
           /**
           * Load more items when users scroll near the top of loaded items.
           */
           LaunchedEffect(viewModel) { viewModel.prepend() }
        }
    items(snapshot.items) { item -> Text("Item: $item") }
    item {
            /**
            * Load more items when users scroll near the bottom of loaded items.
            */
          LaunchedEffect(viewModel) { viewModel.append() }
      }
    }
    
  • เพิ่ม Pager.refresh และ Pager.retry เพื่อกู้คืนจากข้อผิดพลาดในการโหลดเมื่อใช้ asState API ดูตัวอย่างการใช้งาน API ใหม่เพิ่มเติมได้ในเอกสารนี้ (I1e1e9, If3c87, Idbd48, Id1e1d, I816fe)

เวอร์ชัน 3.4

เวอร์ชัน 3.4.2

11 มีนาคม 2026

androidx.paging:paging-*:3.4.2 เปิดตัวแล้ว เวอร์ชัน 3.4.2 มีคอมมิตเหล่านี้

ไม่มีการเปลี่ยนแปลง

  • รุ่นนี้ไม่มีการเปลี่ยนแปลง API หรือลักษณะการทำงานจากเวอร์ชัน 3.4.1

เวอร์ชัน 3.4.1

11 กุมภาพันธ์ 2026

androidx.paging:paging-*:3.4.1 เปิดตัวแล้ว เวอร์ชัน 3.4.1 มีการคอมมิตเหล่านี้

การอัปเดตการขึ้นต่อกัน

  • อัปเดตทรัพยากร Dependency ของ Guava ของ paging-guava จากเวอร์ชัน 31.1 เป็น 32.0.1

เวอร์ชัน 3.4.0

28 มกราคม 2026

androidx.paging:paging-*:3.4.0 เปิดตัวแล้ว เวอร์ชัน 3.4.0 มีการเปลี่ยนแปลงเหล่านี้

การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 3.3.0

  • เพิ่มเป้าหมาย KMP ไปยัง paging-common, paging-testing และ paging-compose แล้ว ตอนนี้ทั้งหมดรองรับ JVM(Android และเดสก์ท็อป), เนทีฟ (Linux, iOS, watchOS, tvOS, macOS, MinGW) และเว็บ (JavaScript, WasmJS)
  • paging-common, paging-testing และ paging-compose ได้นำการรองรับ macosX64, iosX64, watchosX64 และ tvosX64 ออกเพื่อให้สอดคล้องกับการเลิกใช้งานเป้าหมาย macosX64 ของ Jetbrains
  • เพิ่ม PagingState API closestItemAroundPosition ใหม่เพื่อดึงข้อมูลรายการที่โหลดซึ่งอยู่ใกล้กับตำแหน่งเป้าหมายมากที่สุดและตรงกับเพรดิเคตอินพุต ซึ่งใช้เพื่อสร้างคีย์รีเฟรชตามรายการได้ในกรณีที่รายการที่เหมาะแก่การยึดเหนี่ยวอยู่ใกล้ๆ แต่ไม่ได้อยู่ในตำแหน่งเป้าหมายที่แน่นอน

เวอร์ชัน 3.4.0-rc01

14 มกราคม 2026

androidx.paging:paging-*:3.4.0-rc01 เปิดตัวแล้ว เวอร์ชัน 3.4.0-rc01 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

เวอร์ชัน 3.4.0-beta01

17 ธันวาคม 2025

androidx.paging:paging-*:3.4.0-beta01 เปิดตัวแล้ว เวอร์ชัน 3.4.0-beta01 มีการเปลี่ยนแปลงเหล่านี้

การแก้ไขข้อบกพร่อง

  • แก้ไขการแย่งชิงทรัพยากรระหว่างการโหลด RecyclerView และ Refresh ซึ่งทำให้เกิด IndexOutOfBoundsException ใน RecyclerView การอัปเดต UI ที่หยุดชะงักเนื่องจากการโหลด Refresh อย่างต่อเนื่องอาจทำให้สถานะเพจจิ้งไม่ซิงค์กับ RecyclerView ปัญหานี้แก้ไขได้โดยการรีเซ็ตเพจจิ้งเป็นสถานะก่อนรีเฟรชหากการรีเฟรชถูกขัดจังหวะ (เช่น โดยการโหลด Refresh ติดต่อกัน) (I771b0, b/409809768)

เวอร์ชัน 3.4.0-alpha04

10 กันยายน 2025

androidx.paging:paging-*:3.4.0-alpha04 เปิดตัวแล้ว เวอร์ชัน 3.4.0-alpha04 มี คอมมิตเหล่านี้

การเปลี่ยนแปลง API

  • เพิ่ม PagingState API closestItemAroundPosition ใหม่เพื่อดึงข้อมูลรายการที่โหลดซึ่งอยู่ใกล้กับตำแหน่งเป้าหมายมากที่สุดและตรงกับเพรดิเคตอินพุต ใช้เพื่อสร้างคีย์รีเฟรชตามรายการได้ในกรณีที่รายการที่เหมาะแก่การยึดเหนี่ยวอยู่ใกล้ๆ แต่ไม่ได้อยู่ในตำแหน่งเป้าหมายที่แน่นอน (I96e5c, b/440187139)

เวอร์ชัน 3.4.0-alpha03

27 สิงหาคม 2025

androidx.paging:paging-*:3.4.0-alpha03 เปิดตัวแล้ว เวอร์ชัน 3.4.0-alpha03 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • Paging-common ได้เพิ่มเดสก์ท็อปเป็นเป้าหมาย Kotlin Multiplatform (KMP) ใหม่ โดยรวมแล้วตอนนี้รองรับ JVM(Android และเดสก์ท็อป), Native (Linux, iOS, watchOS, tvOS, macOS, MinGW) และเว็บ (JavaScript, WasmJS) (Id2483, b/436884811)
  • การทดสอบการแบ่งหน้าได้เพิ่มเป้าหมาย Kotlin Multiplatform (KMP) ใหม่ โดยรวมแล้วตอนนี้รองรับ JVM(Android และเดสก์ท็อป), Native (Linux, iOS, watchOS, tvOS, macOS, MinGW) และเว็บ (JavaScript, WasmJS) (I0c543, b/435014650)
  • Paging-compose ได้เพิ่มเป้าหมาย Kotlin Multiplatform (KMP) ใหม่ โดยรวมแล้วตอนนี้รองรับ JVM(Android และเดสก์ท็อป), Native (Linux, iOS, watchOS, tvOS, macOS, MinGW) และเว็บ (JavaScript, WasmJS) (I70d44, b/436884801)

การเปลี่ยนแปลง API

เวอร์ชัน 3.4.0-alpha02

30 กรกฎาคม 2025

androidx.paging:paging-*:3.4.0-alpha02 เปิดตัวแล้ว เวอร์ชัน 3.4.0-alpha02 มีคอมมิตเหล่านี้

การเปลี่ยนแปลง API

  • ตอนนี้ PagingData.from อนุญาตให้ตั้งค่า placeholdersBefore และ placeholdersAfter ได้แล้ว โปรดทราบว่าการเลื่อนผ่านตัวยึดตำแหน่งเหล่านี้จะไม่ทริกเกอร์การโหลด (I06983)

เวอร์ชัน 3.4.0-alpha01

2 กรกฎาคม 2025

androidx.paging:paging-*:3.4.0-alpha01 เปิดตัวแล้ว เวอร์ชัน 3.4.0-alpha01 มี คอมมิตเหล่านี้

ฟีเจอร์ใหม่

แก้ไขข้อบกพร่อง

  • การทดสอบหน่วย Android ที่ดึงข้อมูลใน Paging 3.3 ขึ้นไปจะไม่เกิดข้อผิดพลาดจาก PagingLogger อีกต่อไป (Ia9400, b/331684448)
  • แก้ไขข้อบกพร่องที่ RecyclerView แสดง IndexOutOfBoundsException เมื่อผู้ใช้เลื่อนขณะอัปเดต RecyclerView (Id1f16, b/381024738)
  • แก้ไขข้อบกพร่องที่การแบ่งหน้าไม่สามารถทริกเกอร์การโหลดเพิ่มเติมเมื่อรีเฟรชขณะเลื่อน (I60ca5, b/352586078)
  • แก้ไขปัญหาการขัดข้องเมื่อเลื่อนขณะรีเฟรชรายการการแบ่งหน้า (I8c65a, b/347649763)

เวอร์ชัน 3.3

เวอร์ชัน 3.3.6

12 กุมภาพันธ์ 2025

androidx.paging:paging-*:3.3.6 เปิดตัวแล้ว เวอร์ชัน 3.3.6 มีการเปลี่ยนแปลงเหล่านี้

แก้ไขข้อบกพร่อง

  • ตอนนี้ระบบจะจัดเก็บสัญญาณรีเฟรชและลองอีกครั้งที่ส่งระหว่างการรีเฟรชครั้งแรก และจะส่งอีกครั้งโดยอัตโนมัติเมื่อ Paging presenter พร้อม

การมีส่วนร่วมจากภายนอก

  • ขอขอบคุณ Eva ที่ส่งการแก้ไขข้อบกพร่อง (#754)

เวอร์ชัน 3.3.5

11 ธันวาคม 2024

androidx.paging:paging-*:3.3.5 เปิดตัวแล้ว เวอร์ชัน 3.3.5 มี คอมมิตเหล่านี้

แก้ไขข้อบกพร่อง

  • แก้ไขข้อบกพร่องที่ RecyclerView แสดง IndexOutOfBoundsException เมื่อผู้ใช้เลื่อนขณะอัปเดต RecyclerView (Id1f16, b/381024738)

เวอร์ชัน 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-Multiplatform ใหม่ ได้แก่ 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 ภายในหรือ paging-runtime ของ AsyncPagingDataDiffer
  • เพิ่มเมธอดตัวช่วยใหม่ LoadStates และ CombinedLoadStates ใน hasError และ isIdle เพื่อตรวจสอบว่า LoadStates อยู่ในสถานะข้อผิดพลาดหรือสถานะ NotLoading ตามลำดับ นอกจากนี้ เรายังได้เพิ่มawaitNotLoading()เมธอดส่วนขยาย Kotlin ใหม่ใน Flow<CombinedLoadStates> ซึ่งจะรอจนกว่าการโหลดจะเข้าสู่สถานะ NotLoading หรือสถานะข้อผิดพลาด
  • PagingData.empty() จะส่งสถานะ NotLoading โดยค่าเริ่มต้น เว้นแต่จะมีการส่ง LoadStates ที่กำหนดเองไปยังตัวสร้าง ซึ่งแตกต่างจากลักษณะการทำงานที่มีอยู่ซึ่งจะไม่ส่ง LoadStates เมื่อส่งไปยัง PagingDataAdapter หรือจะส่งสถานะการโหลดเมื่อรวบรวมเป็น LazyPagingItems เมื่อรวบรวมเป็น LazyPagingItems ตอนนี้ระบบจะแสดงรายการที่ว่างเปล่าทันทีเมื่อเริ่มคอมโพสิชันด้วย

ความเข้ากันได้ของ Kotlin Multiplatform

ตอนนี้ Paging มีอาร์ติแฟกต์ที่เข้ากันได้กับ Kotlin Multiplatform แล้ว ซึ่งส่วนใหญ่เป็นผลมาจากงานที่อัปสตรีมจากโปรเจ็กต์ multiplatform-paging ของ CashApp

  • paging-common ได้ย้าย API ของ Paging 3 ทั้งหมดไปยัง common และตอนนี้เข้ากันได้กับ JVM และ iOS นอกเหนือจาก Android
  • paging-testing ได้ย้ายโค้ดไปยัง common และตอนนี้ใช้งานร่วมกับ jvm และ iOS ได้แล้ว นอกเหนือจาก Android
  • paging-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 สำหรับโค้ดทั่วไปแล้ว (I78f0d, b/327682438)

เวอร์ชัน 3.3.0-alpha04

6 มีนาคม 2024

androidx.paging:paging-*:3.3.0-alpha04 เปิดตัวแล้ว เวอร์ชัน 3.3.0-alpha04 มีการคอมมิตเหล่านี้

การแก้ไขข้อบกพร่อง

  • แก้ไขข้อผิดพลาดเล็กน้อยในเอกสารประกอบที่เกี่ยวข้องกับการเพิ่มความเข้ากันได้กับ Kotlin Multiplatform (aosp/2950785)

เวอร์ชัน 3.3.0-alpha03

7 กุมภาพันธ์ 2024

androidx.paging:paging-*:3.3.0-alpha03 เปิดตัวแล้ว เวอร์ชัน 3.3.0-alpha03 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • ตอนนี้ PagingDataPresenter เป็นคลาสแบบสาธารณะแล้ว ตอนนี้คุณสร้างผู้บรรยายแบบหลายแพลตฟอร์มบน PagingDataPresenter ได้แล้ว โดยไม่ต้องใช้ Paging API ภายในหรือ paging-runtime ของ AsyncPagingDataDiffer (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 Multiplatform

ตอนนี้ Paging จะจัดส่งอาร์ติแฟกต์ที่เข้ากันได้กับ Kotlin Multiplatform ซึ่งส่วนใหญ่เป็นผลมาจากงานที่อัปสตรีมจากโปรเจ็กต์ multiplatform-paging ของ CashApp ซึ่งจะช่วยให้เราหลีกเลี่ยงความแตกต่างระหว่างที่เก็บทั้ง 2 แห่งและทำให้ที่เก็บทั้งสองเข้ากันได้

  • paging-common ได้ย้าย API ของ Paging 3 ทั้งหมดไปยัง common และตอนนี้เข้ากันได้กับ JVM และ iOS นอกเหนือจาก Android
  • paging-testing ได้ย้ายโค้ดไปยัง common และตอนนี้ใช้งานร่วมกับ jvm และ iOS ได้แล้ว นอกเหนือจาก Android
  • paging-compose ได้ย้ายโค้ดไปยัง common และจัดส่งอาร์ติแฟกต์ Android ซึ่งตรงกับการรองรับหลายแพลตฟอร์มของ androidx.compose
  • paging-runtime, paging-guava, paging-rxjava2 และ paging-rxjava3 จะยังคงใช้ได้เฉพาะใน Android เท่านั้น

การเปลี่ยนแปลง API

  • เราได้เลิกใช้งานอินเทอร์เฟซ Logger สาธารณะซึ่งมีไว้สำหรับการใช้งานภายในเท่านั้น (I16e95, b/288623117)

การมีส่วนร่วมจากภายนอก

เวอร์ชัน 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 มีคอมมิตต่อไปนี้

แก้ไขข้อบกพร่อง

  • แก้ไขปัญหาที่ API asSnapshot() ของอาร์ติแฟกต์การทดสอบการแบ่งหน้าจะค้างเมื่อส่ง Flow ที่สร้างโดยใช้ PagingData.from(List) เนื่องจาก asSnapshot() จะไม่มีข้อมูลเกี่ยวกับเวลาที่การโหลดเสร็จสิ้น (ไม่เหมือนกับโอเวอร์โหลด PagingData.from(List, LoadStates)) วิธีแก้ปัญหานี้ใช้ได้กับ Flow ที่ดำเนินการจนเสร็จสมบูรณ์ได้เท่านั้น (เช่น flowOf(PagingData.from(...))) สำหรับ Flow ที่ดำเนินการจนเสร็จสมบูรณ์ไม่ได้ (เช่น MutableStateFlow) ให้ใช้โอเวอร์โหลด PagingData.from ที่มี LoadStates (I502c3)
  • ตอนนี้ Paging Compose ใช้ 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)))) ส่ง Flow นี้ไปยัง Composable @Preview เป็นตัวรับเพื่อให้ collectAsLazyPagingItems() แสดงตัวอย่าง
    • รองรับเลย์เอาต์แบบเลื่อนทั้งหมด เช่น LazyVerticalGrid และ HorizontalPager รวมถึงคอมโพเนนต์แบบเลื่อนที่กำหนดเองจากไลบรารี Wear และ TV ซึ่งทำได้ผ่านเมธอดส่วนขยาย LazyPagingItems ระดับต่ำกว่าแบบใหม่ itemKey และ itemContentType ซึ่งช่วยให้คุณใช้พารามิเตอร์ key และ contentType กับ API items มาตรฐานที่มีอยู่แล้วสำหรับ LazyColumn, LazyVerticalGrid รวมถึงพารามิเตอร์ที่เทียบเท่าใน API เช่น HorizontalPager
    • items(lazyPagingItems) และ itemsIndexed(lazyPagingItems) ซึ่งรองรับเฉพาะ LazyListScope เลิกใช้งานแล้ว
  • อาร์ติแฟกต์ paging-testing ใหม่ซึ่งมี API ที่ออกแบบมาเพื่อการทำ Unit Test ของแต่ละเลเยอร์ในแอปและการผสานรวมกับ 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] ซึ่งใช้ได้กับทั้งการแบ่งหน้าด้วย View หรือการแบ่งหน้าด้วย Compose
  • เพิ่มตัวสร้างสำหรับ PagingDataAdapter และ AsyncPagingDataDiffer ซึ่งยอมรับ CoroutineContext แทน CoroutineDispatcher
  • เพิ่มPagingSourceFactoryอินเทอร์เฟซการทำงานใหม่PagingSourceที่ให้พื้นผิว API ที่ชัดเจนกว่า Lambda ก่อนหน้า () -> คุณสามารถใช้โรงงานนี้เพื่อสร้างอินสแตนซ์ของเพจเจอร์ได้

เวอร์ชัน 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

  • Paging Compose มีความเสถียรของ API อย่างเป็นทางการแล้ว ด้วยเหตุนี้ เวอร์ชันจึงได้รับการอัปเดตจาก 1.0.0-alpha20 เพื่อให้ตรงกับเวอร์ชันของอาร์ติแฟกต์ Paging อื่นๆ ทั้งหมดในตอนนี้

การเปลี่ยนแปลง API

เวอร์ชัน 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

  • ตอนนี้เราได้ใส่คำอธิบายประกอบ @VisibleForTesting ใน API สาธารณะทั้งหมดในการทดสอบการแบ่งหน้าเพื่อให้มั่นใจว่า API เหล่านี้จะใช้ในการทดสอบเท่านั้น (I7db6e)
  • asSnapshot API ไม่จำเป็นต้องส่ง CoroutineScope อีกต่อไป ตอนนี้ค่าเริ่มต้นคือการใช้บริบทที่รับช่วงมาจากขอบเขตระดับบน (Id0a78, b/282240990)
  • จัดเรียงพารามิเตอร์คอนสตรัคเตอร์ TestPager ใหม่เพื่อให้ตรงกับลำดับของพารามิเตอร์คอนสตรัคเตอร์ Pager จริงโดยสัญชาตญาณ (I6185a)
  • ย้ายข้อมูลการใช้ประเภทแลมบ์ดา () -> PagingSource<Key, Value> ของ paging-testing ไปยังประเภท 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)

การมีส่วนร่วมจากภายนอก

เวอร์ชัน 3.2.0-alpha04

8 กุมภาพันธ์ 2023

androidx.paging:paging-*:3.2.0-alpha04 เปิดตัวแล้ว เวอร์ชัน 3.2.0-alpha04 มีคอมมิตต่อไปนี้

การทดสอบเพจจิ้ง

  • ตอนนี้อาร์ติแฟกต์ paging-testing มีเมธอด asPagingSourceFactory สำหรับสร้าง pagingSourceFactory จาก Flow<List<Value>> เพื่อส่งไปยัง Pager List<Value>> แต่ละรายการที่ปล่อยออกมาจาก Flow จะแสดงถึงการสร้างข้อมูลที่แบ่งเป็นหน้า ซึ่งช่วยให้ทดสอบการแบ่งหน้าได้ เช่น 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 lambda ช่วยให้คุณเลียนแบบ 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 ที่ออกแบบมาเพื่อการทำ Unit Test ของแต่ละเลเยอร์ในแอปและการผสานรวมกับ 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() ได้อย่างสะดวก ซึ่งจะช่วยให้ใช้เมธอดไลบรารีมาตรฐาน Kotlin flatten ได้โดยอ้อมเมื่อได้รับ 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 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • ตอนนี้ Paging จะแสดงบันทึกผ่านคลาส 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

  • Flow<PagingData>.observable API และ Flow<PagingData>.flowable API ไม่ได้อยู่ในขั้นทดลองอีกต่อไป
  • การเปลี่ยนแปลงลักษณะการทำงานของ 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() ในกรณีที่ Paging ส่งเหตุการณ์การโหลดหลายรายการไปยังดาวน์สตรีมในขณะที่ไม่มี Observer หรือระหว่างที่ Observer เปลี่ยนไปใช้ 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

  • API ของ Flow<PagingData>.observable และ Flow<PagingData>.flowable ไม่ใช่เวอร์ชันทดลองอีกต่อไป (Ie0bdd)

การแก้ไขข้อบกพร่อง

  • สำหรับ LoadStates ตอนนี้ endOfPaginationReached จะเป็น false สำหรับ LoadType.REFRESH เสมอ ก่อนหน้านี้ true endOfPaginationReached REFRESH จะเป็นจริงสำหรับ RemoteMediator แต่ไม่ใช่สำหรับ PagingSource ตอนนี้ลักษณะการทำงานนี้ได้รับการรวมเข้าด้วยกันเพื่อให้แสดงผล false เสมอ เนื่องจากไม่สมเหตุสมผลที่ REFRESH จะเป็นเทอร์มินัล และตอนนี้ได้มีการบันทึกเป็นส่วนหนึ่งของสัญญา API ใน LoadStates แล้ว เมื่อตัดสินใจว่าจะสิ้นสุด การแบ่งหน้าหรือไม่ คุณควรพิจารณา ทิศทาง APPEND หรือ PREPEND เสมอ (I047b6)
  • ตอนนี้ LoadStates จาก Paging จะรอค่าที่ถูกต้องจากทั้ง PagingSource และ RemoteMediator ก่อนที่จะปล่อยลงมาที่สตรีมระหว่างการสร้าง การดำเนินการนี้จะป้องกันไม่ให้ PagingData รุ่นใหม่ส่ง NotLoading ใน CombinedLoadStates.source.refresh หากมีการโหลดอยู่แล้ว ตอนนี้ PagingData รุ่นใหม่จะเริ่มต้นด้วยการโหลดสำหรับสถานะการรีเฟรชอย่างถูกต้องเสมอ แทนที่จะรีเซ็ตเป็น NotLoading อย่างไม่ถูกต้องในบางกรณี

    การยกเลิกการสร้างที่ผ่านมาจะเกิดขึ้นทันทีเมื่อมีการยกเลิก / การสร้างใหม่ ไม่จำเป็นต้องใช้ .collectLatest ใน Flow<PagingData> อีกต่อไป แม้ว่าจะยังคงแนะนำให้ใช้อยู่ก็ตาม (I0b2b5, b/177351336, b/195028524)

  • .loadStateFlow และ .addLoadStateListener ใน API ของผู้นำเสนอจะไม่ส่ง CombinedLoadStates เริ่มต้นซ้ำซ้อนอีกต่อไป ซึ่งจะมีการตั้งค่าสถานะสื่อกลางเป็น null และสถานะแหล่งที่มาเป็น NotLoading(endOfPaginationReached = false) เสมอ ซึ่งหมายความว่า

    1. ระบบจะป้อนข้อมูลสถานะตัวกลางเสมอหากคุณใช้ RemoteMediator
    2. การลงทะเบียนเครื่องมือฟัง loadState ใหม่หรือเครื่องมือรวบรวมใหม่ใน .loadStateFlow จะไม่ปล่อยค่าปัจจุบันทันทีอีกต่อไป หากยังไม่ได้รับ CombinedLoadStates จริงจาก PagingData กรณีนี้อาจเกิดขึ้นหากตัวรวบรวมหรือ Listener เริ่มทำงานก่อนที่จะส่ง 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 แสดงผล LoadResult.Invalid การแบ่งหน้าจะทิ้งข้อมูลที่โหลดและทำให้ PagingSource ไม่ถูกต้อง ประเภทการแสดงผลนี้ออกแบบมาเพื่อจัดการข้อมูลที่อาจไม่ถูกต้องหรือล้าสมัยซึ่งอาจแสดงผลจากฐานข้อมูลหรือเครือข่าย

    ตัวอย่างเช่น หากมีการเขียนลงในฐานข้อมูลพื้นฐาน แต่ PagingSource ไม่ทำให้เป็นโมฆะได้ทันเวลา อาจทำให้ได้ผลลัพธ์ที่ไม่สอดคล้องกันหากการใช้งานขึ้นอยู่กับ ความเปลี่ยนแปลงไม่ได้ของชุดข้อมูลสำรองที่โหลดจาก (เช่น การใช้งาน DB รูปแบบ LIMIT OFFSET) ในกรณีนี้ เราขอแนะนำให้ตรวจสอบการลบล้างหลังจากโหลดและส่งคืน LoadResult.Invalid ซึ่งจะทำให้ Paging ยกเลิกคำขอโหลดที่รอดำเนินการหรือในอนาคตไปยัง PagingSource นี้และลบล้าง

    นอกจากนี้ Paging2 API ยังรองรับประเภทการแสดงผลนี้ด้วย ซึ่งใช้ประโยชน์จาก LivePagedList หรือ RxPagedList เมื่อใช้ PagingSource กับ API ของ PagedList ใน Paging2 ระบบจะยกเลิกการเชื่อมต่อ PagedList ทันที ซึ่งจะหยุดความพยายามในการโหลดข้อมูลใน PagedList นี้ และ ทริกเกอร์การลบล้างใน PagingSource

    LoadResult เป็นคลาสที่ปิดผนึก ซึ่งหมายความว่านี่เป็นการเปลี่ยนแปลงที่ แหล่งที่มาไม่เข้ากัน ดังนั้น Use Case ที่ใช้ผลลัพธ์ของ PagingSource.load โดยตรงจะต้องจัดการ LoadResult.Invalid ในเวลาคอมไพล์ ตัวอย่างเช่น ผู้ใช้ Kotlin ที่ใช้ประโยชน์จาก exhaustive-when เพื่อตรวจสอบประเภทการแสดงผลจะต้องเพิ่มการตรวจสอบประเภทที่ไม่ถูกต้อง (Id6bd3, b/191806126, b/192013267)

การแก้ไขข้อบกพร่อง

  • ตอนนี้ Callback การทำให้เป็นโมฆะที่เพิ่มผ่าน PagingSource.registerInvalidatedCallback หรือ DataSource.addInvalidatedCallback จะทริกเกอร์โดยอัตโนมัติหากลงทะเบียนใน PagingSource / DataSource ที่ไม่ถูกต้องอยู่แล้ว ซึ่งจะช่วยแก้ไขปัญหาภาวะแข่งขันที่ทำให้เพจจิ้งทิ้งสัญญาณการลบล้างและค้างเมื่อระบุแหล่งที่มาซึ่งไม่ถูกต้องอยู่แล้วในระหว่างการโหลดครั้งแรก นอกจากนี้ ตอนนี้ระบบจะนำ การเรียกกลับ invalidate ออกอย่างถูกต้องหลังจากทริกเกอร์แล้ว เนื่องจากรับประกันได้ว่าจะเรียกใช้ไม่เกิน 1 ครั้ง (I27e69)
  • การส่งค่าเริ่มต้นของตัวยึดตำแหน่ง (InitialPagedList) จากสตรีม PagedList ที่สร้างขึ้นใหม่ เช่น LivePagedListBuilder หรือ RxPagedListBuilder จะไม่ล้างข้อมูลที่โหลดไว้ก่อนหน้านี้อีกต่อไป

เวอร์ชัน 3.1.0-alpha02

1 กรกฎาคม 2021

androidx.paging:paging-*:3.1.0-alpha02 เปิดตัวแล้ว เวอร์ชัน 3.1.0-alpha02 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • เพิ่มเครื่องมือฟัง onPagesPresented และ API ของ Flow Presenter ซึ่งจะทริกเกอร์ทันทีหลังจากอัปเดตหน้าที่นำเสนอใน 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)

แก้ไขข้อบกพร่อง

  • แก้ไขปัญหาที่บางครั้ง Paging จะส่งเหตุการณ์ no-op differ ไปยัง RecyclerView ซึ่งอาจทำให้ Listener บางรายการทริกเกอร์ก่อนเวลา (Ic507f, b/182510751)

การมีส่วนร่วมจากภายนอก

  • เพิ่ม API ความเข้ากันได้ของ PagedList ที่เลิกใช้งานแล้วลงในอาร์ติแฟกต์ 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 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • ตอนนี้ Paging Compose รองรับการแสดงตัวอย่างรายการข้อมูลจำลองโดยการสร้าง 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 กับเลย์เอาต์แบบเลื่อนขี้เกียจอื่นๆ เช่น LazyVerticalGrid, HorizontalPager หรือคอมโพเนนต์แบบเลื่อนขี้เกียจที่กำหนดเองอื่นๆ ที่ไลบรารี Wear และ TV มีให้ การแก้ไขความไม่ยืดหยุ่นนี้คือการอัปเดตหลักสำหรับการเปิดตัวครั้งนี้

เราจำเป็นต้องสร้าง API ในเลเยอร์อื่นเพื่อรองรับเลย์เอาต์แบบ Lazy มากขึ้น แทนที่จะจัดเตรียม API items ที่กำหนดเองสำหรับเลย์เอาต์แบบ Lazy แต่ละรายการ ตอนนี้ Paging Compose มีเมธอดส่วนขยายระดับที่ต่ำกว่าเล็กน้อยใน LazyPagingItems ใน itemKey และ itemContentType API เหล่านี้มุ่งเน้นการช่วยคุณติดตั้งใช้งานพารามิเตอร์ key และ contentType กับ API มาตรฐาน items ที่มีอยู่แล้วสำหรับ 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

  • เพื่อให้ย้ายข้อมูลไปยัง API ใหม่ได้ง่ายขึ้น ฟังก์ชันส่วนขยาย items และ itemsIndexed ใน LazyListScope จึงรองรับพารามิเตอร์ contentType แล้ว ซึ่งสอดคล้องกับการรองรับใน 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 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • ตอนนี้ Paging จะแสดงบันทึกผ่านคลาส 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 และตัวรับรายการของ 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 alpha12

เวอร์ชัน 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 ซึ่งอาจทำให้ 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 ซึ่งทำให้ 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 v2 DataSource ผ่านเส้นทางความเข้ากันได้
  • 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 ทำเครื่องหมาย 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

  • 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 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • เพิ่มการรองรับสถานะที่บันทึกไว้สำหรับกรณีการใช้งานพื้นฐานต่อไปนี้ (การรองรับอย่างเต็มรูปแบบ โดยเฉพาะในกรณีแหล่งที่มาแบบเลเยอร์ยังอยู่ระหว่างดำเนินการ)
    • แคชโฟลว์และไม่ได้ปิดแอปพลิเคชัน (เช่น แคชโฟลว์ใน ViewModel และกิจกรรมจะสร้างขึ้นใหม่ในกระบวนการ)
    • ระบบจะนับแหล่งที่มาของการแบ่งหน้า เปิดใช้ตัวยึดตำแหน่ง และเลย์เอาต์จะไม่สลับกัน

การเปลี่ยนแปลง API

  • PagingSource.getRefreshKey() ตอนนี้เป็น API ที่เสถียรแล้ว (I22f6f, b/173530980)
  • PagingSource.invalidate ไม่ใช่ฟังก์ชันที่เปิดให้ใช้งานอีกต่อไป หากต้องการรับการแจ้งเตือนเมื่อมีการลบล้าง ให้พิจารณาเรียกใช้เมธอด registerInvalidatedCallback แทนการลบล้าง invalidate (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 ใน PagingSource

    LoadParams.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
  • แก้ไขข้อบกพร่องที่ API ความเข้ากันได้ของ Paging2.0 .asPagingSourceFactory() อาจทำให้ 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 }
    

    (Ib5570, b/173530908)

แก้ไขข้อบกพร่อง

  • ตอนนี้ endOfPaginationReached สำหรับ RemoteMediator REFRESH จะเผยแพร่ไปยังการอัปเดต LoadState อย่างถูกต้อง และป้องกันไม่ให้ APPEND และ PREPEND ระยะไกลทำงาน (I94a3f, b/155290248)
  • การแสดงรายการที่ว่างเปล่าเนื่องจากหน้าเริ่มต้นว่างเปล่าหรือ การกรองที่หนักหน่วงจะไม่ทำให้การแบ่งหน้าไม่เริ่มทำงาน PREPEND หรือโหลด APPEND อีกต่อไป (I3e702, b/168169730)
  • แก้ไขปัญหาที่ไม่ได้เรียกใช้ getRefreshKey ใน PagingSource รุ่นต่อๆ ไปเมื่อมีการลบล้างอย่างรวดเร็ว (I45460, b/170027530)

การมีส่วนร่วมจากภายนอก

  • เพิ่มคลาส Abstract ใหม่ชื่อ InvalidatingPagingSourceFactory พร้อม .invalidate() API ที่ส่งต่อการเรียกใช้ invalidate ไปยัง 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 ของ Callback ที่ไม่ถูกต้องไม่ได้รับการเรียกหลังจากแปลงโดย .map หรือ .mapByPage (I1f244, b/165313046)

แก้ไขข้อบกพร่อง

  • การโต้ตอบของ Paging กับ ViewPager ได้รับการปรับปรุงอย่างมาก กล่าวคือ เพจจิ้งจะไม่ยกเลิกการเรียก RemoteMediator#load เนื่องจากหน้าไม่ถูกต้องอีกต่อไป นอกจากนี้ จะไม่มีการส่งคำขอโหลดเพื่อต่อท้าย/นำหน้า หากต้องใช้ REFRESH จนกว่าคำขอ REFRESH จะเสร็จสมบูรณ์ (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

  • ตอนนี้โอเปอเรเตอร์ที่ใช้ Guava ของ Async PagingData จะยอมรับ 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 โดยรวมเพื่อแสดงรายการแบบคงที่ในบางสถานะ เช่น ก่อนที่ REFRESH เริ่มต้นจะเสร็จสิ้น หรือเพียงเพื่อทดสอบการเปลี่ยนรูปแบบ (Id134d)
  • เลิกใช้งาน dataRefresh Flow / Listener API เนื่องจากมีไว้เพื่อแสดงสถานะรายการที่แสดงใน REFRESH แต่ด้วยการปรับปรุงเวลาเรียกกลับของ loadState Flow / Listener และพร็อพเพอร์ตี้ itemCount จึงทำให้เกิดความซ้ำซ้อน (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)

แก้ไขข้อบกพร่อง

  • ตอนนี้ Room (และ PositionalDataSource) PagingSources จะแสดงตัวคั่นนำหน้าเป็นส่วนหนึ่งของหน้าแรก เพื่อให้ผู้ใช้ไม่ต้องเลื่อนเพื่อแสดงตัวคั่น (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 จะไม่ทำให้เกิดข้อขัดข้องเนื่องจากการรวบรวมพร้อมกันใน 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 มีคอมมิตเหล่านี้

Paging Library ได้รับการอัปเดตเป็น 3.0 เพื่อเปิดใช้ฟีเจอร์ใหม่ๆ ที่สำคัญหลายอย่าง

ฟีเจอร์ใหม่ของ 3.0

ปัญหาที่ทราบ

  • เอกสารประกอบ Java ของ Paging 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 และฟังก์ชันที่ยังไม่ได้ใช้งานบางส่วนเปิดเผยต่อสาธารณะ ซึ่งจะพร้อมใช้งานในรุ่นต่อๆ ไป

  • Paging 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 มีคอมมิตเหล่านี้

การแก้ไขข้อบกพร่อง

  • ตอนนี้การโหลดเริ่มต้นที่ต่อเนื่องจาก PositionalDataSource จะอยู่ตรงกลางการเข้าถึงล่าสุดเมื่อปิดใช้ตัวยึดตำแหน่ง

เวอร์ชัน 2.1.0

เวอร์ชัน 2.1.0

25 มกราคม 2019

Paging 2.1.0 เปิดตัวโดยไม่มีการเปลี่ยนแปลงจาก 2.1.0-rc01

เวอร์ชัน 2.1.0-rc01

6 ธันวาคม 2018

Paging 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 แสดงขึ้น หลังจากเปรียบเทียบความแตกต่าง ซึ่งจะช่วยให้คุณซิงค์การสลับ PagedList กับการอัปเดต UI อื่นๆ ได้ b/73781068
  • PagedList.getLoadedCount() เพื่อให้คุณทราบว่ามีรายการอยู่ในความทรงจำกี่รายการ โปรดทราบว่าค่าที่ส่งคืนจะเท่ากับ .size() เสมอหากปิดใช้ตัวยึดตำแหน่ง

แก้ไขข้อบกพร่อง

  • แก้ไขภาวะแข่งขันเมื่อทำการ Diff หากมีการนำรายการกลับมาใช้ใหม่ b/111591017
  • ตอนนี้ PagedList.loadAround() จะแสดง IndexOutOfBoundsException เมื่อดัชนีไม่ถูกต้อง ก่อนหน้านี้อาจเกิดข้อขัดข้องพร้อมข้อยกเว้นอื่นๆ ที่ไม่ชัดเจน
  • แก้ไขกรณีที่ขนาดการโหลดเริ่มต้นที่เล็กมากรวมกับข้อมูลที่ไม่มีการเปลี่ยนแปลงจะส่งผลให้ไม่มีการโหลดเพิ่มเติม b/113122599

เวอร์ชัน 2.0.0

เวอร์ชัน 2.0.0

1 ตุลาคม 2018

Paging 2.0.0 เปิดตัวพร้อมการแก้ไขข้อบกพร่องรายการเดียว

แก้ไขข้อบกพร่อง

  • แก้ไขข้อขัดข้องที่อาจเกิดขึ้นเมื่อเลื่อนอย่างรวดเร็วโดยใช้ PositionalDataSource และตัวยึดตำแหน่ง b/114635383

เวอร์ชัน 2.0.0-beta01

2 กรกฎาคม 2018

การแก้ไขข้อบกพร่อง

  • แก้ไขเนื้อหาที่หายไปในบางกรณีที่เพิ่มไว้ข้างหน้า (ปิดใช้ตัวยึดตำแหน่ง, PositionalDataSource) b/80149146
  • (เปิดตัวแล้วใน 1.0.1) แก้ไขข้อขัดข้องที่ PagedListAdapter และ AsyncPagedListDiffer ไม่สามารถส่งสัญญาณเหตุการณ์การย้าย b/110711937

ทรัพยากร Dependency ก่อน 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

Paging 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

Paging RxJava2 1.0.0-rc1 กำลังเปลี่ยนเป็นรุ่นที่อาจได้รับการเผยแพร่โดยไม่มีการเปลี่ยนแปลงจากเวอร์ชันอัลฟ่าเริ่มต้น

เวอร์ชัน 1.0.0

เวอร์ชัน 1.0.0-rc1

19 เมษายน 2018 รุ่นที่อาจได้รับการเผยแพร่ของ Paging

เราไม่มีปัญหาที่ทราบหรือฟีเจอร์ใหม่ที่กำหนดไว้สำหรับรุ่น Paging 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 เพื่อชี้แจงบทบาทของ Executor ใน Builder

    • เปลี่ยนชื่อ setBackgroundThreadExecutor() เป็น setFetchExecutor() (ใน PagedList.Builder และ LivePagedListBuilder)

    • เปลี่ยนชื่อ setMainThreadExecutor() เป็น setNotifyExecutor() (ใน PagedList.Builder) แล้ว

  • แก้ไขสมาชิก PagedList.mCallbacks ให้เป็นแบบส่วนตัวแล้ว

แก้ไขข้อบกพร่อง

  • LivePagedListBuilder จะทริกเกอร์การโหลดเริ่มต้น PagedList ในตัวดำเนินการที่ระบุ แทนที่จะเป็นกลุ่มเธรด I/O ของ Arch Components

  • แก้ไขลักษณะการทำงานที่ไม่ถูกต้องใน Wrapper DataSource ภายใน (ใช้เพื่อติดตั้งใช้งาน DataSource.map รวมถึงการโหลด PositionalDataSource ที่ปิดใช้ตัวยึดตำแหน่ง) b/77237534

เวอร์ชัน 1.0.0-alpha7

21 มีนาคม 2018

เพจจิ้ง 1.0.0-alpha7 จะเปิดตัวพร้อมกับวงจร 1.1.1 เนื่องจาก Paging alpha7 ขึ้นอยู่กับการย้ายข้อมูลของคลาส Function ที่กล่าวถึงข้างต้น คุณจะต้องอัปเดตการขึ้นต่อกันของ lifecycle:runtime เป็น android.arch.lifecycle:runtime:1.1.1

Paging alpha7 มีกำหนดเป็นรุ่นสุดท้ายก่อนที่ Paging จะเข้าสู่เวอร์ชันเบต้า

การเปลี่ยนแปลง API

  • ตอนนี้ออบเจ็กต์ DataSource.LoadParams มีคอนสตรัคเตอร์สาธารณะ และออบเจ็กต์ DataSource.LoadCallback เป็นแบบนามธรรมแล้ว ซึ่งจะช่วยให้สามารถรวม DataSource หรือทดสอบ DataSource โดยตรงด้วย Callback จำลองได้ b/72600421
  • Mapper สำหรับ DataSource และ DataSource.Factory
    • map(Function<IN,OUT>) ช่วยให้คุณเปลี่ยนรูปแบบ รวม หรือตกแต่งผลลัพธ์ที่โหลดโดย DataSource ได้
    • mapByPage(<List<IN>,List<OUT>>) ช่วยให้การประมวลผลแบบกลุ่มเป็นไปได้เช่นกัน (เช่น หากรายการที่โหลดจาก SQL ต้องค้นหาฐานข้อมูลแยกต่างหากเพิ่มเติม ก็สามารถทำได้แบบเป็นกลุ่ม)
  • PagedList#getDataSource() ได้รับการเพิ่มเป็นวิธีการที่สะดวก b/72611341
  • เราได้นำคลาสที่เลิกใช้งานทั้งหมดออกจาก API แล้ว ซึ่งรวมถึงส่วนที่เหลือของแพ็กเกจ recyclerview.extensions และ LivePagedListProvider
  • DataSource.Factory เปลี่ยนจากอินเทอร์เฟซเป็นคลาส Abstract เพื่อเปิดใช้ฟังก์ชันการทำงานของแผนที่

การแก้ไขข้อบกพร่อง

  • เปลี่ยน Builder เป็นแบบสุดท้าย 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