חלוקה לדפים

‫Paging Library מאפשרת לכם לטעון נתונים בהדרגה ובצורה חלקה ב-RecyclerView של האפליקציה.

בטבלה הזו מפורטים כל פריטי המידע בקבוצה androidx.paging.

פריט מידע שנוצר בתהליך פיתוח (Artifact) גרסה יציבה גרסה מועמדת להפצה גרסת בטא גרסת אלפא
paging-* 3.4.1 - - ‎3.5.0-alpha01
paging-compose 3.4.1 - - ‎3.5.0-alpha01
הספרייה הזו עודכנה לאחרונה בתאריך: 11 במרץ 2026

הצהרה על יחסי תלות

כדי להוסיף תלות ב-Paging, צריך להוסיף את מאגר Google Maven לפרויקט. מידע נוסף זמין במאמר בנושא מאגר Maven של Google.

אתם יכולים להוסיף את יחסי התלות של הארטיפקטים שאתם צריכים בקובץ build.gradle של האפליקציה או המודול:

Groovy

dependencies {
  def paging_version = "3.4.1"

  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.0-alpha01"
}

Kotlin

dependencies {
  val paging_version = "3.4.1"

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

מידע על שימוש בתוספים של Kotlin זמין במסמכי התיעוד של ktx.

מידע נוסף על יחסי תלות זמין במאמר הוספת יחסי תלות ב-build.

משוב

המשוב שלכם עוזר לנו לשפר את Jetpack. נשמח לדעת אם גיליתם בעיות חדשות או אם יש לכם רעיונות איך לשפר את הספרייה הזו. כדאי לעיין בבעיות הידועות בספרייה הזו לפני שמדווחים על בעיה. כדי להוסיף הצבעה בדיווח על בעיה קיימת, לוחצים על כפתור הכוכב.

יצירת דיווח על בעיה חדשה

מידע נוסף זמין במאמרי העזרה בנושא Issue Tracker.

גרסה 3.5

גרסה ‎3.5.0-alpha01

‫11 במרץ 2026

androidx.paging:paging-*:3.5.0-alpha01 מופץ. גרסה ‎3.5.0-alpha01 מכילה את השמירות האלה.

תכונות חדשות

  • הארטיפקט paging-common כולל עכשיו אופרטור חדש של זרימת עבודה asState ב-Flow<PagingData> כדי להמיר אותו ל-Flow<ItemSnapshotList>. הפעולה הזו מאפשרת לכם להשתמש ביכולות כמו:

    • לשלב את נתוני התנועה של ItemSnapshotList עם מקורות נתונים אחרים
    • שיתוף תהליך עם כמה אוספים בלי cachedIn
    • שמירת נתונים של דפים במטמון באופן מקומי
    • שינוי נתונים שמוצגים בדפים בזיכרון
    • הצגת נתונים עם חלוקה לדפים כחלק ממצב ממשק המשתמש
    // 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.1

‫11 בפברואר 2026

androidx.paging:paging-*:3.4.1 מופץ. גרסה 3.4.1 מכילה את השמירות האלה.

עדכון תלות

  • עדכנו את התלות של paging-guava ב-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 ושולחן עבודה), ב-Native (Linux, ‏ iOS, ‏ watchOS, ‏ tvOS, ‏ macOS,‏ MinGW) וב-Web (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. עדכונים של ממשק המשתמש שמופרעים בגלל טעינות רצופות של 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) וב-Web (JavaScript, ‏ WasmJS). (Id2483, ‏ b/436884811)
  • נוספו יעדים חדשים של Kotlin Multiplatform ‏ (KMP) לבדיקות של החלוקה לדפים. בסך הכול, הוא תומך עכשיו ב-JVM(Android ושולחן עבודה), ב-Native (Linux, ‏ iOS, ‏ watchOS, ‏ tvOS, ‏ macOS,‏ MinGW) וב-Web (JavaScript, ‏ WasmJS). ‫(I0c543, ‏ b/435014650)
  • ב-Paging-compose נוספו יעדים חדשים של Kotlin Multiplatform‏ (KMP). בסך הכול, הוא תומך עכשיו ב-JVM(Android ושולחן עבודה), ב-Native (Linux, ‏ iOS, ‏ watchOS, ‏ tvOS, ‏ macOS,‏ MinGW) וב-Web (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 יהיה מוכן.

External Contribution

  • תודה ל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 APIs פנימיים או ב-paging-runtime של AsyncPagingDataDiffer.
  • הוספנו את ה-helper methods החדשות LoadStates ו-CombinedLoadStates ב-hasError וב-isIdle כדי לבדוק אם LoadStates נמצא במצב Error או NotLoading, בהתאמה. בנוסף, הוספנו שיטת הרחבה חדשה של awaitNotLoading() Kotlin ב-Flow<CombinedLoadStates> שממתינה עד שהטעינה תסתיים במצב NotLoading או במצב שגיאה.
  • PagingData.empty() שולח עכשיו מצבי NotLoading כברירת מחדל, אלא אם מעבירים LoadStates מותאמים אישית ל-constructor שלו. ההתנהגות הזו שונה מההתנהגות הקיימת, שבה לא מתבצעת שליחה של 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

  • הספרייה Paging משתמשת עכשיו בהערה @MainThread של AndroidX Annotation לקוד נפוץ. ‫(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, בלי להשתמש בממשקי API פנימיים של החלפת דפים או ב-paging-runtime של AsyncPagingDataDiffer. (Id1f74, b/315214786)
  • נוספו methods חדשות של LoadStates ו-CombinedLoadStates כדי לבדוק אם LoadStates נמצא במצב Error או NotLoading. בנוסף, הוספנו API חדש שממתין ל-LoadStateFlow עד שהטעינה תסתיים במצב NotLoading או במצב שגיאה. (Id6c67)

שינוי בהתנהגות

  • PagingData.empty() שולח עכשיו מצבי NotLoading כברירת מחדל, אלא אם מעבירים LoadStates מותאמים אישית ל-constructor שלו. ההתנהגות הזו שונה מההתנהגות הקיימת, שבה לא מתבצעת שליחה של 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. כך נוכל למנוע מצב שבו שני מאגרי מידע שונים זה מזה ולשמור על תאימות ביניהם.

  • 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)

External Contribution

גרסה ‎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 של ארטיפקט הבדיקה של החלוקה לדפים נתקע כשמועבר אליו Flow שנבנה באמצעות PagingData.from(List), כי ל-asSnapshot() לא היה מידע על סיום הטעינה (בניגוד ל-PagingData.from(List, LoadStates) overload). הפתרון הזה פועל רק עם Flows שאפשר להשלים (למשל, flowOf(PagingData.from(...))). כדי להשתמש ב-Flows שלא ניתן להשלים (למשל, 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. השינויים מאז גרסה 3.1.0 כוללים:
    • תמיכה בתצוגה מקדימה של רשימת נתונים מזויפים על ידי יצירת PagingData.from(fakeData) וצירוף PagingData ל-MutableStateFlow (לדוגמה, MutableStateFlow(PagingData.from(listOf(1, 2, 3)))). מעבירים את התהליך הזה לרכיבים הניתנים להרכבה @Preview כמקבל של collectAsLazyPagingItems() לתצוגה מקדימה.
    • תמיכה בכל הפריסות של Lazy, כמו LazyVerticalGrid ו-HorizontalPager, וגם ברכיבי Lazy בהתאמה אישית מהספריות של Wear ו-TV. השגנו את זה באמצעות שיטות חדשות להרחבת LazyPagingItems רמת itemKey ו-itemContentType, שעוזרות לכם להטמיע את הפרמטרים key ו-contentType בממשקי ה-API הרגילים של items שכבר קיימים עבור LazyColumn, LazyVerticalGrid וגם בממשקי API מקבילים כמו HorizontalPager.
    • התמיכה ב-items(lazyPagingItems) וב-itemsIndexed(lazyPagingItems), שתומכים רק ב-LazyListScope, יצאה משימוש.
  • ארטיפקט paging-testing חדש שמספק ממשקי API שנועדו לבדיקת יחידות של כל שכבה באפליקציה והשילוב שלה עם Paging בבידוד. לדוגמה, הוא כולל
    • מחלקה TestPager שמאפשרת לאמת את ההתנהגות של הטמעת PagingSource מותאמת אישית באופן עצמאי מ-Pager ומממשק משתמש אמיתי.
    • asPagingSourceFactory APIs להמרת Flow<List<Value>> או List<Value> סטטי ל-PagingSourceFactory שאפשר להעביר ל-Pager בבדיקות
    • asSnapshot Kotlin extension ב-Flow<PagingData<Value>>, שמתרגם את Flow<PagingData<Value>> ל-List<Value> ישיר. ‫asSnapshot lambda מאפשרת לחקות את ממשק המשתמש של האפליקציה באמצעות ממשקי API כמו scrollTo או appendScrollWhile, כדי שתוכלו לוודא שהתמונה של הנתונים נכונה בכל נקודה בסט הנתונים המחולק לדפים.
  • הוספנו יומני ברירת מחדל כדי לחשוף מידע על תוצאות ניפוי הבאגים של החלפה בין דפים בשתי רמות: 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 מכילה את השמירות האלה.

External Contribution

  • תודה ל-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 מכילה את השמירות האלה.

פיתוח נייטיב של דפים

  • הגענו ליציבות של API ב-Paging Compose. לכן, הגרסה עודכנה מ-1.0.0-alpha20 כך שתתאים לגרסה של כל שאר הארטיפקטים של החלוקה לדפים.

שינויים ב-API

גרסה ‎3.2.0-alpha06

‫24 במאי 2023

androidx.paging:paging-*:3.2.0-alpha06 מופץ. גרסה ‎3.2.0-alpha06 מכילה את השמירות האלה.

תכונות חדשות

  • הוספנו PagingSourceFactoryממשק פונקציונלי חדש() -> PagingSource שמספק משטח API מפורש יותר מאשר פונקציות ה-lambda הקיימות. אפשר להשתמש בפקטורי הזה כדי ליצור מופע של Pager. (I33165, ‏ b/280655188)
  • הוספנו paging-testing API חדש של List<Value>.asPagingSourceFactory() כדי לקבל PagingSourceFactory שנטען רק מרשימה קבועה של נתונים. עדיין צריך להשתמש בתוסף הקיים ב-Flow<List<Value>> לבדיקה עם כמה דורות של נתונים סטטיים. (Id34d1, b/280655188)

שינויים ב-API

  • כל ממשקי ה-API הציבוריים ב-paging-testing מסומנים עכשיו ב-@VisibleForTesting כדי להבטיח שממשקי ה-API האלה ישמשו רק בבדיקות. (I7db6e)
  • ב-asSnapshot API כבר לא צריך להעביר CoroutineScope. ההגדרה שמוגדרת כברירת מחדל היא שימוש בהקשר שמועבר בירושה מההיקף של ההורה. (Id0a78, ‏ b/282240990)
  • שינוי הסדר של פרמטרים של בנאי TestPager כך שיתאים באופן אינטואיטיבי לסדר של פרמטרים של בנאי Pager אמיתי (I6185a)
  • העברנו את השימוש ב-lambda type () -> PagingSource<Key, Value> לבדיקות החלפה של דפים ל-type 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

  • ב-API של בדיקות החלוקה לדפים של asSnapshot, הפרמטר loadOperations מוגדר עכשיו כברירת מחדל ל-lambda ריק. כך אפשר להתקשר אל asSnapshot בלי להעביר פעולות טעינה כדי לאחזר את הנתונים מהטעינה הראשונית של הרענון. ‫(Ied354, ‏ b/277233770)

שיפורים במסמכי התיעוד

  • עדכנו את המסמכים בנושא asPagingSourceFactory() כדי להבהיר שמדובר בשיטת הרחבה ב-Flow שמחזירה מפעל לשימוש חוזר ליצירת מופעים של PagingSource. ‫(I5ff4f, ‏ I705b5)
  • עדכנו את התיעוד בנושא LoadResult.Pageconstructor כדי להבהיר את הצורך בביטול ההגדרה של itemsBefore ושל itemsAfter כדי לתמוך במעבר מהיר. (Ied354)

פריטי תוכן שהוספת

גרסה ‎3.2.0-alpha04

‫8 בפברואר 2023

androidx.paging:paging-*:3.2.0-alpha04 מופץ. גרסה ‎3.2.0-alpha04 מכילה את השמירות האלה.

בדיקות של חלוקה לדפים

  • ארטיפקט paging-testing מכיל עכשיו את ה-method‏ asPagingSourceFactory ליצירת pagingSourceFactory מ-Flow<List<Value>> שיועבר ל-Pager. כל List<Value>> שמופק מהזרימה מייצג יצירה של נתונים עם מספור דפים. כך אפשר לבצע בדיקות של החלפת דפים, למשל PagingData טרנספורמציות על ידי יצירת מקור נתונים פיקטיבי כדי שה-Pager יוכל לאסוף ממנו נתונים. (I6f230, b/235528239)
  • הארטיפקט paging-testing הורחב עם ממשקי API חדשים שמתאימים לאימות הנתונים שכלולים ב-Flow<PagingData<T>>. אפשר להשתמש בזה, למשל, כדי לאשר את הפלט של Flow<PagingData<T>> משכבת ViewModel.

    הפעולה הזו מתבצעת באמצעות asSnapshot Kotlin extension ב-Flow<PagingData<Value>>, שמתרגם את Flow<PagingData<Value>> ל-List<Value> ישיר. הפונקציה asSnapshot lambda מאפשרת לחקות את ממשק המשתמש של האפליקציה באמצעות ממשקי 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

  • קריאות לממשק המשתמש אל 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 מכילה את השמירות האלה.

בדיקות של חלוקה לדפים

הגרסה הזו כוללת פריט מידע חדש שנוצר בתהליך פיתוח (Artifact): paging-testing. הארטיפקט הזה מספק ממשקי API שנועדו לבדיקת יחידות של כל שכבה באפליקציה והשילוב שלה עם Paging בבידוד.

לדוגמה, הגרסה הראשונה הזו כוללת מחלקה TestPager שמאפשרת לכם לאמת את ההתנהגות של הטמעה מותאמת אישית של PagingSource באופן עצמאי מ-Pager ומממשק המשתמש האמיתי שנדרשים בדרך כלל כדי לדמות את השילוב של פתרון ה-Paging מקצה לקצה.

TestPager צריך להתייחס אל כאל זיוףכאל כפיל לבדיקה שמשקף את ההטמעה האמיתית של Pager תוך מתן ממשק API פשוט לבדיקה של PagingSource. ממשקי ה-API האלה הם ממשקי suspend API, וצריך להריץ אותם בתוך runTest, כמו שמתואר במדריך בנושא בדיקת קורוטינות של Kotlin ב-Android.

דוגמה לשימוש בממשקי ה-API האלה אפשר למצוא בבדיקות של room-paging, שעברו רפקטורינג כדי להשתמש ב-TestPager.

שינויים ב-API

  • הפעלה של איטרציה נוחה ב-LoadResult.Page.data דרך LoadResult.Page.iterator(). באופן עקיף, זה מאפשר שימוש בשיטה Kotlin standard library 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 מכילה את השמירות האלה.

תכונות חדשות

  • החלוקה לדפים מספקת עכשיו רישומים דרך המחלקות AsyncPagingDataDifferאו PagingDataAdapter כדי לחשוף מידע על תוצאות ניפוי הבאגים שנאסף מ-PagingData.
  • אפשר להפעיל את היומנים באמצעות הפקודה adb shell adb shell setprop log.tag.Paging [DEBUG|VERBOSE].(b/235527159)

תיקוני באגים

  • תוקנה השגיאה שקשורה ל-constructor החסר 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)

External Contribution

  • בוצע עדכון של :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

  • ממשקי ה-API‏ Flow<PagingData>.observable ו-Flow<PagingData>.flowable כבר לא ניסיוניים
  • שינויים בהתנהגות של 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, מה שגורם ל-Paging לבטל את כל בקשות הטעינה שממתינות או שיגיעו בעתיד אל PagingSource ולפסול אותו. סוג ההחזרה הזה נועד לטפל בנתונים לא תקפים או לא עדכניים שעלולים להיות מוחזרים ממסד הנתונים או מהרשת.
  • נוספו ממשקי API של מציגים .onPagesPresented ו-.addOnPagesUpdatedListener שהופעלו באופן סינכרוני כשהדפים הוצגו בממשק המשתמש. עדכונים של דפים יכולים להתבצע בתרחישים הבאים:
    • הטעינה הראשונית של דור חדש של PagingData מסתיימת, גם אם הדור החדש לא מכיל שינויים בפריטים המוצגים. כלומר, דור חדש שמשלים טעינה ראשונית ללא עדכונים כי הרשימה זהה בדיוק עדיין יפעיל את הקריאה החוזרת הזו.
    • דף מוכנס, גם אם הדף המוזן לא מכיל פריטים חדשים.
    • דף מושמט, גם אם הדף שהושמט היה ריק.

גרסה ‎3.1.0-rc01

‫3 בנובמבר 2021

androidx.paging:paging-*:3.1.0-rc01 מופץ. גרסה ‎3.1.0-rc01 מכילה את השמירות האלה.

תיקוני באגים

  • תוקנה בעיית מרוץ תהליכים ודליפת זיכרון ב-‎ .cachedIn() במקרים שבהם נשלחו מספר אירועי טעינה על ידי Paging downstream בזמן שאין observers או בין המקרים שבהם 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

  • Flow<PagingData>.observable ו-Flow<PagingData>.flowable APIs כבר לא ניסיוניים. (Ie0bdd)

תיקוני באגים

  • ב-LoadStates, הערך של endOfPaginationReached הוא עכשיו תמיד false ב-LoadType.REFRESH. בעבר, הערך של endOfPaginationReached היה יכול להיות true עבור RemoteMediator REFRESH, אבל לא עבור PagingSource. ההתנהגות הזו מאוחדת עכשיו כך שתמיד מוחזרת false, כי אין היגיון בכך ש-REFRESH יהיה סופי, ועכשיו היא מתועדת כחלק מחוזה ה-API ב-LoadStates. כשמחליטים אם להפסיק את המספור, צריך תמיד לעשות זאת בהתאם לכיוון APPEND או PREPEND. (I047b6)
  • הפונקציה LoadStates מ-Paging מחכה עכשיו לערכים תקינים מ-PagingSource ומ-RemoteMediator לפני שהיא פולטת נתונים במורד הזרם בין הדורות. השינוי הזה מונע מדורות חדשים של PagingData לשלוח NotLoading ב-CombinedLoadStates.source.refresh אם כבר היה Loading. דורות חדשים של PagingData תמיד יתחילו עם Loading למצב רענון, במקום לאפס קודם ל-NotLoading באופן שגוי במקרים מסוימים.

    ביטול של דורות קודמים מתבצע עכשיו באופן אוטומטי כשמתבצעת פסילה או כשנוצרים דורות חדשים. כבר לא צריך להשתמש ב-‎ .collectLatest ‎ ב-Flow<PagingData>, אבל עדיין מומלץ מאוד לעשות זאת. (I0b2b5, ‏ b/177351336, ‏ b/195028524)

  • .loadStateFlow ו-.addLoadStateListener ב-APIs של המגיש כבר לא שולחים באופן מיותר את הערך ההתחלתי 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.Invalid ל-PagingSource. כש-PagingSource.load מחזיר LoadResult.Invalid, מערכת ה-paging מבטלת את הנתונים שנטענו ומבטלת את התוקף של PagingSource. סוג ההחזרה הזה נועד לטפל בנתונים לא תקפים או מיושנים שעלולים להיות מוחזרים ממסד הנתונים או מהרשת.

    לדוגמה, אם מתבצעת כתיבה למסד הנתונים הבסיסי, אבל ה-PagingSource לא מבטל את התוקף בזמן, יכול להיות שהוא יחזיר תוצאות לא עקביות אם ההטמעה שלו תלויה בשינוי של מערך הנתונים שהוא טוען ממנו (למשל, הטמעות של מסד נתונים בסגנון LIMIT OFFSET). בתרחיש הזה, מומלץ לבדוק אם יש פסילה אחרי הטעינה ולהחזיר LoadResult.Invalid, מה שגורם לספריית Paging לבטל את כל בקשות הטעינה התלויות או העתידיות אל PagingSource ולפסול אותו.

    סוג ההחזרה הזה נתמך גם על ידי Paging2 API, שמתבסס על LivePagedList או על RxPagedList. כשמשתמשים ב-PagingSource עם ממשקי ה-API של PagedList ב-Paging2, ה-PagedList מנותק באופן מיידי, מה שמפסיק את הניסיונות הנוספים לטעון נתונים ב-PagedList הזה ומפעיל ביטול תוקף ב-PagingSource.

    ‫LoadResult היא מחלקה אטומה, כלומר זהו שינוי שגורם לאי-תאימות למקור, ולכן תרחישי שימוש שמשתמשים ישירות בתוצאות של PagingSource.load יצטרכו לטפל ב-LoadResult.Invalid בזמן ההידור. לדוגמה, משתמשי Kotlin שמשתמשים ב-exhaustive-when כדי לבדוק את סוג ההחזרה יצטרכו להוסיף בדיקה לסוג לא חוקי. (Id6bd3, ‏ b/191806126, ‏ b/192013267)

תיקוני באגים

  • הפעלת קריאות חוזרות (callback) לביטול תוקף שנוספו באמצעות PagingSource.registerInvalidatedCallback או DataSource.addInvalidatedCallback מתבצעת עכשיו באופן אוטומטי אם הן נרשמו ב-PagingSource או ב-DataSource שכבר לא תקפים. הבעיה הזו נפתרה. היא נגרמה בגלל מרוץ תהליכים שגרם להפסקת האותות של פסילת הדפים ולהיתקעות שלהם כשסופק מקור שכבר היה פסול במהלך הטעינה הראשונית. בנוסף, עכשיו פונקציות קריאה חוזרת (callback) של ביטול תוקף מוסרות בצורה תקינה אחרי ההפעלה שלהן, כי מובטח שהן יופעלו פעם אחת לכל היותר. (I27e69)
  • שליחת ערך placeholder ראשוני (InitialPagedList) מזרם PagedList חדש, למשל LivePagedListBuilder או RxPagedListBuilder, לא תמחק יותר נתונים שנפרסו בעבר.

גרסה ‎3.1.0-alpha02

‫1 ביולי 2021

androidx.paging:paging-*:3.1.0-alpha02 מופץ. גרסה ‎3.1.0-alpha02 מכילה את השמירות האלה.

תכונות חדשות

  • נוספו ממשקי API של מאזין ושל מציג זרימה של דפים מוצגים שמופעלים מיד אחרי שדפים מוצגים מתעדכנים בממשק המשתמש.

    מכיוון שהעדכונים האלה מסונכרנים עם ממשק המשתמש, אפשר להפעיל שיטות של מתאמים כמו 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)

תיקוני באגים

  • תוקנה בעיה שבה לפעמים, כשמשתמשים בדפדוף, נשלחו אירועים של no-op differ ל-RecyclerView, מה שיכול היה לגרום להפעלה מוקדמת של מאזינים מסוימים. (Ic507f, ‏ b/182510751)

External Contribution

  • נוספו ממשקי API של תאימות PagedList שהוצאו משימוש לארטיפקט rxjava3 (‏Id1ce2, ‏b/182497591)

Paging Compose Version 1.0.0

גרסה ‎1.0.0-alpha20

‫24 במאי 2023

androidx.paging:paging-compose:1.0.0-alpha20 מופץ. גרסה ‎1.0.0-alpha20 מכילה את השמירות האלה.

תכונות חדשות

  • התכונה 'חלוקה לדפים' ב-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 מכילה את השמירות האלה.

תמיכה בכל הפריסות העצלניות

בעבר, Paging Compose סיפק תוספים מותאמים אישית של items ו-itemsIndexed ב-LazyListScope, מה שאומר שלא הייתה אפשרות להשתמש ב-Paging Compose עם פריסות עצלות אחרות כמו LazyVerticalGrid,‏ HorizontalPager או רכיבים עצלים מותאמים אישית אחרים שסופקו על ידי ספריות Wear ו-TV. העדכון העיקרי במהדורה הזו הוא שיפור הגמישות.

כדי לתמוך ביותר פריסות של טעינה עצלה, היינו צריכים ליצור ממשקי API בשכבה אחרת – במקום לספק API מותאם אישית של items לכל פריסה של טעינה עצלה, 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, אבל חשבנו שעקביות בכל הפריסות של Lazy היא גורם חשוב למשתמשים ב-Paging Compose מעכשיו והלאה. לכן, התוספים הקיימים ל-LazyListScope יצאו משימוש. (I0c459, ‏ I92c8f, ‏ b/276989796)

שינויים ב-API

  • כדי להקל על המעבר לממשקי ה-API החדשים, פונקציות התוסף items ו-itemsIndexed ב-LazyListScope תומכות עכשיו בפרמטר contentType, בדומה לתמיכה בממשקי ה-API החדשים. (Ib1918, ‏ b/255283378)

עדכונים של יחסי תלות

  • התלות של 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))

תיקוני באגים

  • תוקנה השגיאה של מחלקה בונה (constructor) חסרה 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) שמשמשים לחיבור של Paging ל-LazyColumn/Row מקבלים עכשיו את הפרמטר option key param שמאפשר לציין מפתח יציב שמייצג את הפריט. מידע נוסף על מפתחות זמין כאן. (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 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 מכילה את השמירות האלה.

  • העדכון בוצע בהתאם לגרסה ‎1.0.0-alpha08 של Compose.

גרסה ‎1.0.0-alpha02

‫11 בנובמבר 2020

androidx.paging:paging-compose:1.0.0-alpha02 מופץ. גרסה ‎1.0.0-alpha02 מכילה את השמירות האלה.

שינויים ב-API

  • נוספו השיטות .peek(),‏ .snapshot(),‏ .retry() ו-.refresh() אל LazyPagingItems, שחושפות את אותה פונקציונליות שזמינה ב-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 מספק שילוב בין The Paging Library לבין Jetpack פיתוח נייטיב. דוגמה פשוטה לשימוש:

  @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 הוצאו משימוש לטובת ממשקי ה-API החדשים של Paging 3, כדי להשיג את השיפורים הבאים:

  • תמיכה ברמה גבוהה בשגרות המשנה וב-Flow של Kotlin
  • תמיכה בביטול
  • אותות מובנים של מצב טעינה ושגיאות
  • פונקציית ניסיון חוזר + רענון
  • שלושת מחלקות המשנה של DataSource שולבו למחלקה מאוחדת של PagingSource
  • שינויים מותאמים אישית בדפים, כולל שינוי מובנה להוספת מפרידים
  • טעינת כותרות עליונות ותחתונות

גרסה ‎3.0.0-rc01

21 באפריל 2021

androidx.paging:paging-*:3.0.0-rc01 מופץ. גרסה ‎3.0.0-rc01 מכילה את השמירות האלה.

תיקוני באגים

  • תוקנה בעיה שבה לפעמים, כשמשתמשים בדפדוף, נשלחו אירועים של no-op differ ל-RecyclerView, מה שיכול היה לגרום להפעלה מוקדמת של מאזינים מסוימים. (Ic507f, ‏ b/182510751)

גרסה ‎3.0.0-beta03

‫24 במרץ 2021

androidx.paging:paging-*:3.0.0-beta03 מופץ. גרסה ‎3.0.0-beta03 מכילה את השמירות האלה.

תיקוני באגים

  • שיפרנו את הטיפול ב-placeholder כשהרשימה נטענת מחדש, כדי למנוע קפיצות לא צפויות ב-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

  • ‫Rx2 ו-Rx3 wrappers חושפים עכשיו את ההערה הניסיונית שהם תלויים בה. אם אתם משתמשים ב-wrappers של Rx compat ב-paging-rxjava2 או ב-paging-rxjava3, עכשיו תצטרכו להוסיף הערות לשימושים עם @OptIn(ExperimentalCoroutinesApi::class) (Ib1f9d)

תיקוני באגים

  • תוקנה בעיה שגרמה לפעמים לשגיאה IndexOutOfBoundsException: Inconsistency detected כשמשתמשים בממשקי API של גרסה 2 DataSource דרך נתיבי תאימות
  • isInvalid call during initialization of DataSource when used via compatibility paths are now correctly launched on fetchDispatcher instead of on the main thread. התיקון הזה מטפל בIllegalStateException שנובעת מגישה ל-Db ב-thread הראשי כשמשתמשים בהטמעה של 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. יש שתי אפשרויות:
    • FULLY_COMPLETE – התנהגות קיימת; צריך להמתין עד ש-PagingSource ו-RemoteMediator יסמנו את endOfPaginationReached לפני שמוסיפים מפרידי מסוף. אם לא נעשה שימוש ב-RemoteMediator, המערכת מתעלמת מ-remote 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 כבר לא מוגדרות כמחלקות אבסטרקטיות, כי אף פעם לא היו להן methods אבסטרקטיות. (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 מכילה את השמירות האלה.

תכונות חדשות

  • נוספה תמיכה במצב שמור לתרחישי השימוש הבסיסיים הבאים (התמיכה המלאה, במיוחד בתרחיש של מקור בשכבות, עדיין נמצאת בשלבי פיתוח):
    • התהליך נשמר במטמון והאפליקציה לא נסגרת (לדוגמה, התהליך נשמר במטמון במודל תצוגה והפעילות נוצרת מחדש בתהליך)
    • מקור הדפים נספר, מצייני המיקום מופעלים והפריסה לא מדורגת.

שינויים ב-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.

    אם אתם בודקים את Paging2 DataSource בלי להשתמש ב-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 לתאימות ל-Paging 2.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)

External Contribution

  • נוסף מחלקה מופשטת חדשה InvalidatingPagingSourceFactory עם ממשק API‏ .invalidate() שמעביר את הפונקציה 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

  • הגרסאות של DataSource.InvalidatedCallback ב-Kotlin וב-Java שולבו על ידי הפעלת המרות SAM ב-Kotlin באמצעות ממשק פונקציונלי (זמין ב-Kotlin 1.4). בנוסף, תוקן באג שבו לא בוצעו קריאות חוזרות (callback) לגרסת kotlin של invalidate אחרי טרנספורמציה על ידי .map או .mapByPage. (I1f244, b/165313046)

תיקוני באגים

  • האינטראקציה של Paging עם ViewPager השתפרה באופן משמעותי. ספציפית, ההעברה לדף הבא לא תבטל יותר שיחה עם RemoteMediator#load בגלל פסילה של דף. בנוסף, אם נדרשת רענון, המערכת לא תשלח יותר בקשת טעינה של הוספה או הוספה לפני, עד שבקשת הרענון תושלם בהצלחה. (I6390b, ‏ b/162252536)
  • הבדיקה של API lint ל-MissingGetterMatchingBuilder מופעלת עבור androidx ‏ (I4bbea, ‏ b/138602561)
  • תוקן באג שבו רכיבי העזרה של .withLoadState* ConcatAdapter קרסו בגלל הודעה על RecyclerView מפרוטוקול Thread ברקע (I18bb5, ‏ b/170988309)
  • תוקן באג שבו טעינה של דף קטן מאוד ולא ריק מנעה לפעמים את ההפעלה של טעינה מראש בצורה תקינה.Iffda3 b/169259468

גרסה ‎3.0.0-alpha07

‫1 באוקטובר 2020

androidx.paging:paging-*:3.0.0-alpha07 מופץ. גרסה ‎3.0.0-alpha07 מכילה את השמירות האלה.

שינויים ב-API

  • אופרטורים של Async PagingData שמבוססים על Guava מקבלים עכשיו Executor כפרמטר, כדי לשלוט בהקשר הביצוע. (Id4372)

תיקוני באגים

  • תוקנה חריגה מסוג IndexOutOfBounds שנזרקה ב-RemoteMediator בגלל מרוץ תהליכים. (I00b7f, b/165821814)
  • תוקנה בעיית תזמון בהמרה של DataSource ל-PagingSource, שיכולה לגרום ל-PagingSource שמתקבל להתעלם מאותות ביטול תוקף מ-DataSource.
  • תוקנה בעיה בלוגיקה של אחזור הדפים, שלפעמים גרמה לכך שהמערכת לא הצליחה לאחזר דורות חדשים של PagingSource עד שהופעלה הפונקציה PagingDataAdapter.refresh()‎
  • תוקנה בעיה שגרמה לאיבוד מיקום הגלילה לפעמים כשמשתמשים ב-DataSource שהומר ל-PagingSource (כמו זה שנוצר על ידי Room), בשילוב עם RemoteMediator

External Contribution

  • תודה ל-@simonschiller על הוספת אופרטורים של טרנספורמציה אסינכרונית מבוססת-Guava ל-RxJava2, ל-RxJava3 ול-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 מכילה את השמירות האלה.

תיקוני באגים

  • החלפה בין דפים (Paging) מבצעת עכשיו אחזור מראש של דפים בצורה נכונה, גם כשהנתונים המוצגים מסוננים באופן משמעותי
  • החזרה של LoadResult.Error לטעינה חוזרת לא גורמת יותר לטעינה חוזרת של גישות לפריטים באופן שגוי

External Contribution

  • תודה ל-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)
  • הוספנו API של snapshot() ל-PagingDataAdapter ול-AsyncPagingDataDiffer כדי לאפשר אחזור של הפריטים שמוצגים בלי להפעיל אחזור של הדף. ‫(I566b6, ‏ b/159104197)
  • נוסף PagingData.from(List<T>) constructor כדי לאפשר הצגה של רשימות סטטיות, שאפשר לשלב עם זרימת ה-PagingData הכוללת כדי להציג רשימות סטטיות במצבים מסוימים, למשל לפני שרענון ראשוני מסתיים או פשוט כדי לבדוק טרנספורמציות. (Id134d)
  • הוצאנו משימוש את ממשקי ה-API של dataRefresh Flow / Listener כי הם נועדו לחשוף את מצב הפריטים שמוצגים ב-REFRESH, אבל עם שיפורים בתזמון של הקריאה החוזרת (callback) של loadState Flow / Listener ובמאפיין itemCount, הם מיותרים (Ia19f3)
  • נוספו עטיפות תאימות ל-RxJava3 עבור PagingSource ו-RemoteMediator (I49ef3, ‏ b/161480176)

תיקוני באגים

  • PositionalDataSource הומר ל-PagingSource באמצעות כלי העזרה toPagingSourceFactory, כולל PagingSource שנוצר על ידי Room, מסומן עכשיו בצורה נכונה כדי לתמוך במעבר בין חלקים. (I3e84c, ‏ b/162161201)
  • תוקן באג שבו שימוש בווריאציה הסינכרונית של submitData הוביל לפעמים למצב מירוץ שגרם לשגיאה ClosedSendChannelException (I4d702, b/160192222)

External Contribution

  • תודה ל-Zac Sweers על הוספת עטיפות תאימות ל-RxJava3 בשם Slack! (I49ef3, ‏ b/161480176)

גרסה ‎3.0.0-alpha03

22 ביולי 2020

androidx.paging:paging-*:3.0.0-alpha03 מופץ. גרסה ‎3.0.0-alpha03 מכילה את השמירות האלה.

שינויים ב-API

  • הבונה (constructor) של 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)

תיקוני באגים

  • ‫PagingSources של Room (ושל PositionalDataSource) יציגו עכשיו מפריד מוביל כחלק מהדף הראשון, כך שהמשתמש לא צריך לגלול כדי לראות אותו. (I6f747, b/160257628)
  • גישה לפריטים במצייני מיקום מפעילה עכשיו בצורה נכונה טעינות של PagingSource עד שמוחזר דף שממלא את האינדקס המבוקש אחרי שהוא עובר טרנספורמציה על ידי PagingData.filter()‎ (I95625, ‏ b/158763195)
  • תיקון באג שבו לפעמים גלילה אחרי ש-PagingSource מחזיר שגיאה יכולה למנוע מ-PagingDataAdapter.retry() לנסות שוב. ‫(I1084f, ‏ b/160194384)
  • תוקנה בעיה שבה יכול להיות שפריטים שמתבצעת אליהם גישה אחרי שהדף נטען לא נטענים, למרות שהגישה לפריט הייתה בטווח prefetchDistance ‏ (Ie95ae,‏ b/160038730)
  • הגדרת PagingConfig.maxSize כבר לא מפעילה placeholder אחרי אירוע של השמטה (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)
  • נוספו עומסים יתרים (overloads) עבור בנאים של PagingDataAdapter ושל AsyncPagingDataDiffer עם ערכי ברירת מחדל נפוצים (Ie91f5)
  • ממשקי ה-API של המתאם, dataRefreshFlow ו-dataRefreshListener, מעבירים עכשיו ערך בוליאני כדי לציין אם PagingData ריק (I6e37e,‏ b/159054196)
  • נוספו ממשקי API של RxJava ו-Guava ל-RemoteMediator –‏ RxRemoteMediator ו-ListenableFutureRemoteMediator
  • נוספו פונקציות עזר ל-PagingState לגישה לפריטים נפוצים כמו isEmpty() ו-firstItemOrNull() (I3b5b6, ‏ b/158892717)

תיקוני באגים

  • הספרייה Pager בודקת עכשיו אם נעשה שימוש חוזר ב-PagingSource ב-factory, כדי למנוע שימוש חוזר לא מכוון ב-PagingSource לא תקין, שגרם לשגיאה לא ברורה (I99809, b/158486430)
  • כשלים מ-REFRESH של RemoteMediator כבר לא מונעים טעינה של PagingSource‏ (I38b1b, ‏ b/158892717)
  • הגרסה של submitData שלא גורמת להשעיה לא גורמת יותר לקריסה בגלל איסוף מקביל במספר PagingData כשקוראים לה אחרי הגרסה של submitData שגורמת להשעיה. (I26358, b/158048877)
  • תוקן החריג 'לא ניתן לאסוף פעמיים ממספר עמודים' שיכול היה להתרחש אחרי שינוי בהגדרות (I58bcc, ‏ b/158784811)

גרסה ‎3.0.0-alpha01

‫10 ביוני 2020

androidx.paging:paging-*:3.0.0-alpha01 מופץ. גרסה ‎3.0.0-alpha01 מכילה את השמירות האלה.

ספריית ה-Paging עודכנה לגרסה 3.0, כדי לאפשר כמה תכונות חדשות וחשובות.

תכונות חדשות בגרסה 3.0

בעיות מוכרות

  • עדיין אין מסמכי Javadoc ל-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 ופונקציות שהוטמעו באופן חלקי ויושקו בגרסה עתידית.

  • הדף 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 מתבצעות עכשיו סביב התאריך שבו בוצעה הגישה האחרונה כשה-placeholders מושבתים

גרסה 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

‫Paging 2.1.0-alpha01 כולל שתי תוספות מרכזיות – השמטת דפים וספריות הרחבות 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 עם עדכונים אחרים בממשק המשתמש. b/73781068
  • PagedList.getLoadedCount() נוסף כדי שתדעו כמה פריטים יש בזיכרון. שימו לב שאם השבתתם את השימוש ב-placeholder, ערך ההחזרה תמיד יהיה .size().

תיקוני באגים

  • תוקן מרוץ תהליכים בהשוואה אם נעשה שימוש חוזר ברשימות b/111591017
  • PagedList.loadAround() מחזירה עכשיו את השגיאה IndexOutOfBoundsException כשהאינדקס לא תקין. בעבר, האפליקציה הייתה עלולה לקרוס עם חריגה לא ברורה אחרת.
  • תוקן מקרה שבו גודל טעינה התחלתי קטן מאוד יחד עם נתונים ללא שינוי לא יגרמו לטעינה נוספת b/113122599

גרסה 2.0.0

גרסה 2.0.0

‫1 באוקטובר 2018

הגרסה של Paging 2.0.0 כוללת תיקון באג אחד.

תיקוני באגים

  • תוקנה קריסה שיכולה להתרחש בגלילה מהירה מאוד באמצעות PositionalDataSource ו-placeholder‏ b/114635383.

גרסה ‎2.0.0-beta01

‫2 ביולי 2018

תיקוני באגים

  • תוקנה בעיה שגרמה להיעלמות תוכן במקרים מסוימים של הוספה בתחילת המחרוזת (placeholder מושבת, PositionalDataSource) b/80149146
  • (כבר פורסם ב-1.0.1) תוקנו קריסות שבהן PagedListAdapter ו-AsyncPagedListDiffer לא הצליחו לסמן אירועי העברה. b/110711937

Pre-AndroidX Dependencies

לגרסאות של 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 Version 1.0.0-rc1

‫16 במאי 2018

הדף RxJava2 1.0.0-rc1 עובר לגרסה מועמדת להפצה ללא שינויים מהגרסה הראשונית אלפא.

גרסה 1.0.0

גרסה ‎1.0.0-rc1

‫19 באפריל 2018 גרסה מועמדת להפצה של פונקציית העמודים

אין לנו בעיות מוכרות נוספות או תכונות חדשות שמתוכננות לגרסת 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 עבור Paging מופצת כמודול אופציונלי נפרד (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 triggers initial PagedList load on the specified executor, instead of the Arch Components IO thread pool.

  • תוקנה התנהגות לא תקינה במעטפות פנימיות של DataSource (שמשמשות להטמעה של DataSource.map וגם לטעינה של PositionalDataSource עם placeholder-disabled) 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.

אנחנו מתכננים שגרסה alpha7 תהיה הגרסה הסופית לפני שנעבור לגרסת בטא של Paging.

שינויים ב-API

  • לאובייקטים מסוג DataSource.LoadParams יש עכשיו בנאי ציבורי, ולאובייקטים מסוג DataSource.LoadCallback יש עכשיו הגדרה מופשטת. כך אפשר לעטוף DataSource או לבדוק ישירות DataSource באמצעות קריאה חוזרת מדמה. b/72600421
  • ‫Mappers for DataSource and DataSource.Factory
    • map(Function<IN,OUT>) מאפשרת לכם לשנות, לעטוף או לקשט תוצאות שנטענו על ידי DataSource.
    • mapByPage(<List<IN>,List<OUT>>) מאפשרת לעשות את אותו הדבר גם לעיבוד ברצף (batch processing) (למשל, אם פריטים שנטענו מ-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

תיקוני באגים

  • תיקון טעינת דפים כשה-placeholders מושבתים b/70573345
  • רישום נוסף ביומן לצורך איתור הבאג IllegalArgumentException‏ b/70360195 (ותיקון משוער בצד Room)
  • תיקונים של קוד לדוגמה ב-Javadoc‏ b/70411933, ‏ b/71467637