חלוקה לדפים

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

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

פריט מידע שנוצר בתהליך פיתוח (Artifact) גרסה יציבה גרסה מועמדת להפצה גרסת בטא גרסת אלפא
paging-* 3.5.3 - - -
paging-compose 3.5.3 - - -
הספרייה הזו עודכנה לאחרונה ב-12 באוקטובר 2026

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

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

אתם יכולים להוסיף את יחסי התלות של הארטיפקטים שאתם צריכים בקובץ 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.

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

משוב

המשוב שלכם עוזר לנו לשפר את 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, הם לא ירדו מתחת לשני דפים כדי לוודא שאזור התצוגה מאוכלס כראוי בנתונים. (I037a0, b/565835910)

External Contribution

תודה ל-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 באוגוסט 2026

‫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>. כלומר, עכשיו אפשר לגשת לנתונים שנטענו מחוץ לשכבת ממשק המשתמש, לשלב את Flow<ItemSnapshotList> עם מקורות נתונים אחרים, לשמור במטמון ולשנות נתונים בדפים באופן מקומי, או לחשוף נתונים בדפים כחלק ממצב ממשק המשתמש ועוד.

  • הוספנו את פונקציות התוסף Pager.append ו-Pager.prepend כדי לטעון עוד נתונים באופן ידני בלי לגלול.

  • הוספנו את פונקציות ההרחבה Pager.refresh ו-Paging.retry כדי להתאושש משגיאות טעינה כשמשתמשים ב-API של asItemSnapshotListFlow.

גרסה ‎3.5.0-rc01

‫22 באפריל 2026

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

ללא שינוי

  • אין שינויים משמעותיים מגרסה 3.5.0-beta01.

גרסה ‎3.5.0-beta01

‫8 באפריל 2026

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

שינויים ב-API

  • השם של ה-API‏ Flow<PagingData>.asState השתנה ל-Flow<PagingData>.asItemSnapshotListFlow (I0dc11, ‏ b/496548025)

גרסה ‎3.5.0-alpha01

‫11 במרץ 2026

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

תכונות חדשות

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

    • לשלב את Flow של 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) { ... }
    }
    
  • בנוסף, פריט המידע שנוצר בתהליך הפיתוח (artifact) של 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 כדי להתאושש משגיאות טעינה כשמשתמשים ב-API של asState. במסמך הזה מופיעות דוגמאות נוספות לשימוש בממשקי ה-API החדשים. (I1e1e9, If3c87, Idbd48, Id1e1d, I816fe)

גרסה 3.4

גרסה 3.4.2

‫11 במרץ 2026

‫androidx.paging:paging-*:3.4.2 מופץ. גרסה 3.4.2 מכילה את ה-commits האלה.

ללא שינוי

  • בגרסה הזו אין שינויים ב-API או בהתנהגות בהשוואה לגרסה 3.4.1.

גרסה 3.4.1

‫11 בפברואר 2026

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

עדכון תלויות

  • עודכנה התלות של paging-guava ב-guava מגרסה 31.1 לגרסה 32.0.1.

‫גרסה 3.4.0

‫28 בינואר 2026

‫androidx.paging:paging-*:3.4.0 מופץ. גרסה 3.4.0 מכילה את ה-commits האלה.

שינויים חשובים מאז גרסה 3.3.0:

  • נוספו עוד יעדי KMP אל paging-common,‏ paging-testing ו-paging-compose. עכשיו כולם תומכים ב-JVM(‏Android ומחשב), ב-Native (‏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 מכילה את ה-commits האלה.

תכונות חדשות

גרסה ‎3.4.0-beta01

‫17 בדצמבר 2025

‫androidx.paging:paging-*:3.4.0-beta01 מופץ. גרסה ‎3.4.0-beta01 מכילה את ה-commits האלה.

תיקוני באגים

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

  • עכשיו אפשר להגדיר את placeholdersBefore ו-placeholdersAfter ב-PagingData.from. חשוב לזכור שגלילה בין הפלייסהולדרים האלה לא מפעילה טעינות. (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)
  • תוקן קריסה שקרתה בזמן גלילה במהלך רענון של פריטי Paging. ‫(I8c65a, b/347649763)

גרסה 3.3

גרסה 3.3.6

‫12 בפברואר 2025

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

תיקוני באגים

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

תרומה חיצונית

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

תכונות חדשות

  • 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 מכילה את ה-commits האלה.

שינויים חשובים מאז גרסה 3.2.0

  • הכיתה PagingDataPresenter היא עכשיו כיתה ציבורית. עכשיו אפשר ליצור מציגים מולטי-פלטפורמה על גבי PagingDataPresenter במקום לדרוש ממשקי API פנימיים של Paging או AsyncPagingDataDiffer של paging-runtime.
  • הוספנו את ה-helper methods החדשות LoadStates ו-CombinedLoadStates ב-hasError וב-isIdle כדי לבדוק אם LoadStates נמצא במצב Error או NotLoading, בהתאמה. בנוסף, הוספנו שיטת הרחבה חדשה של Kotlin‏ awaitNotLoading() ב-Flow<CombinedLoadStates> שממתינה עד שהטעינה תסתיים במצב NotLoading או במצב שגיאה.
  • ‫PagingData.empty() שולח עכשיו מצבי NotLoading כברירת מחדל, אלא אם מועברים LoadStates מותאמים אישית ל-constructor שלו. זה שונה מההתנהגות הקיימת, שבה לא נשלח LoadStates כשנשלח אל PagingDataAdapter או שנשלחים מצבי טעינה כשנאסף בתור LazyPagingItems. כשמפעילים את LazyPagingItems, מוצגת עכשיו גם רשימה ריקה מיד אחרי הקומפוזיציה הראשונית.

תאימות ל-Kotlin Multiplatform

עכשיו אפשר להשתמש ב-Paging כדי לשלוח פריטי מידע שנוצרו בתהליך הפיתוח (artifacts) שתואמים ל-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 מכילה את ה-commits האלה.

גרסה ‎3.3.0-beta01

‫3 באפריל 2024

‫androidx.paging:paging-*:3.3.0-beta01 יוצא ללא שינויים משמעותיים. גרסה ‎3.3.0-beta01 מכילה את ה-commits האלה.

גרסה ‎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)
  • נוספו שיטות עזר חדשות, LoadStates ו-CombinedLoadStates, כדי לבדוק אם LoadStates נמצא במצב שגיאה או במצב 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 ופריטי מידע שנוצרו בתהליך פיתוח (Artifact) של *-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() ברכיב Paging Testing נתקע כשמועבר אליו Flow שנוצר באמצעות PagingData.from(List), כי ל-asSnapshot() לא היה מידע על מועד סיום הטעינה (בניגוד לעומס היתר של PagingData.from(List, LoadStates)). הפתרון העקיף הזה פועל רק עבור Flows שניתן להשלים (למשל, flowOf(PagingData.from(...))). עבור Flows שלא ניתן להשלים (למשל, 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, שבה הגרסה שלה תואמת עכשיו לכל שאר פריטי המידע שנוצרו בתהליך הפיתוח (Artifact) של 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 ומממשק המשתמש האמיתי.
    • ​​ממשקי API של asPagingSourceFactory להמרת Flow<List<Value>> או List<Value> סטטי ל-PagingSourceFactory שאפשר להעביר ל-Pager בבדיקות
    • תוסף Kotlin של asSnapshot ב-Flow<PagingData<Value>>, שמתרגם את Flow<PagingData<Value>> ל-List<Value> ישיר. ‫asSnapshot lambda מאפשרת לכם לחקות את ממשק המשתמש של האפליקציה באמצעות ממשקי API כמו scrollTo או appendScrollWhile, כדי שתוכלו לוודא שתמונת המצב של הנתונים נכונה בכל נקודה בסט הנתונים המחולק לדפים.
  • הוספנו יומני ברירת מחדל כדי לחשוף מידע על תוצאות ניפוי הבאגים של חלוקה לדפים בשתי רמות: VERBOSE ו-DEBUG. אפשר להפעיל את היומנים באמצעות הפקודה adb shell setprop log.tag.Paging [DEBUG|VERBOSE]. ההגדרה הזו חלה גם על Paging עם תצוגות וגם על Paging עם Compose.
  • נוספו קונסטרקטורים ל-PagingDataAdapter ול-AsyncPagingDataDiffer שמקבלים CoroutineContext במקום CoroutineDispatcher.
  • הוספנו ממשק פונקציונלי חדש של PagingSourceFactory שמספק ממשק API מפורש יותר מאשר פונקציות הלמבדה הקודמות של () -> PagingSource. אפשר להשתמש ב-factory הזה כדי ליצור מופע של 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 מכילה את השינויים האלה.

Paging Compose

  • ‫Paging Compose הגיע באופן רשמי ליציבות API. לכן, הגרסה עודכנה מ-1.0.0-alpha20 כדי להתאים לגרסה של כל שאר פריטי המידע שנוצרו בתהליך הפיתוח (Artifact) של 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

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

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

  • כבר לא צריך את ה-dispatcher הראשי כדי להריץ בדיקות של asSnapshot Paging. ההגדרה הזו לא משנה יותר את אופן הפעולה של הבדיקה. (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)
  • עדכנו את המסמכים של ה-constructor של LoadResult.Page כדי להבהיר שצריך לשנות את itemsBefore ו-itemsAfter כדי לתמוך בדילוג. (Ied354)

תכנים ששותפו על ידי משתמשים חיצוניים

גרסה ‎3.2.0-alpha04

‫8 בפברואר 2023

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

בדיקת Paging

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

    כדי לעשות את זה, משתמשים בתוסף asSnapshot של Kotlin ב-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. מידע נוסף זמין במאמר בנושא בדיקת שגרות משנה (coroutines) ב-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 מכילה את השינויים האלה.

בדיקת Paging

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

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

‫TestPager נחשב לזיוף – כפיל בדיקה שמשקף את ההטמעה האמיתית של Pager, תוך מתן ממשק API פשוט לבדיקת PagingSource. ממשקי ה-API האלה הם ממשקי API מסוג suspend וצריך להריץ אותם בתוך runTest, כמו שמתואר במדריך בדיקת פונקציות Coroutine של 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 מכילה את השינויים האלה.

תכונות חדשות

  • Paging מספק עכשיו יומנים באמצעות המחלקות 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

  • בוצע עדכון של ממשק ה-API ‏ :compose:ui:ui-test (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 מכילה את השמירות האלה.

תיקוני באגים

  • תוקן מצב מרוץ (race condition) ודליפת זיכרון ב-‎ .cachedIn()‎ במקרים שבהם נשלחו כמה אירועי טעינה על ידי Paging downstream כשאין משקיפים, או בין המקרים שבהם משקיף עובר ל-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, המצבים של ה-mediator תמיד יאוכלסו.
    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,‏ LoadResult.Invalid, נוסף ל-PagingSource. כשהפונקציה PagingSource.load מחזירה את הערך LoadResult.Invalid, תהליך חלוקת הדפים מבטל את הנתונים שנטענו ומבטל את התוקף של 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 שכבר לא היו תקפים. הבעיה הזו פותרת מרוץ תהליכים שגרם ל-Paging להשמיט אותות ביטול ולהיתקע כשסופק מקור שכבר לא היה תקין במהלך הטעינה הראשונית. בנוסף, קריאות חוזרות (callbacks) לא חוקיות מוסרות עכשיו בצורה תקינה אחרי שהן מופעלות, כי מובטח שהן יופעלו לכל היותר פעם אחת. (I27e69)
  • שליחת ערך ראשוני של פלייסהולדר (InitialPagedList) מ-PagedList stream חדש, למשל 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)

תיקוני באגים

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

External Contribution

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

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

בעבר, 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, אבל חשבנו שעקביות בכל הפריסות של טעינה עצלה היא גורם חשוב למשתמשים ב-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 setprop log.tag.Paging [DEBUG|VERBOSE] של adb shell. ‪([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, אפשר עכשיו להשתמש בפרמטר key של האפשרות, שמאפשר לציין מפתח יציב שמייצג את הפריט. מידע נוסף על מפתחות (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 תואם רק לגרסה 1.0.0-beta07 ומעלה של Compose.

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

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

גרסה ‎3.0.0-rc01

‫21 באפריל 2021

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

תיקוני באגים

  • תוקנה בעיה שבה לפעמים Paging שלח אירועי no-op differ ל-RecyclerView, מה שיכול היה לגרום למאזינים מסוימים לפעול מוקדם מדי. (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

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

תיקוני באגים

  • תוקנה השגיאה IndexOutOfBoundsException: Inconsistency detected שלפעמים נזרקה כשמשתמשים בממשקי API של DataSource בגרסה 2 דרך נתיבי תאימות
  • isInvalid call במהלך ההפעלה של DataSource כשמשתמשים בו דרך נתיבי תאימות, מופעל עכשיו בצורה נכונה ב-fetchDispatcher במקום ב-main thread. הפעולה הזו מתקנת IllegalStateException שנגרם בגלל גישה למסד הנתונים ב-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() צריכה להיות הטמעה אמיתית שמחזירה מפתח על סמך מיקום הגלילה הנוכחי של המשתמש, שמאפשרת ל-Paging להמשיך לטעון במרכז אזור התצוגה דרך PagingState.anchorPosition אם אפשר. (I4339a)
  • ‫InvalidatingPagingSourceFactory הוא עכשיו מחלקה סופית (Ia3b0a)
  • אפשר להגדיר את ההתנהגות של מפריד הטרמינל (כותרת עליונה / כותרת תחתונה) באמצעות פרמטר אופציונלי נוסף מסוג SeparatorType. יש שתי אפשרויות:
    • ‫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 כבר לא מופשטות כי אף פעם לא היו להן 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 מכילה את השמירות האלה.

תכונות חדשות

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

שינויים ב-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 בלי להשתמש ב-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)
  • הצגת רשימה ריקה, בין אם בגלל דף ראשוני ריק או סינון כבד, לא תמנע יותר מ-Paging להפעיל טעינות של PREPEND או APPEND. (I3e702, b/168169730)
  • תוקנה בעיה שבה הקריאה ל-getRefreshKey לא מתבצעת בדורות הבאים של PagingSource כשמתרחשים ביטולים במהירות. (I45460, b/170027530)

תרומה חיצונית

  • נוספה מחלקה מופשטת חדשה בשם 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

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

תיקוני באגים

  • האינטראקציה של Paging עם ViewPager שופרה באופן משמעותי. באופן ספציפי, Paging לא יבטל יותר קריאה ל-RemoteMediator#load בגלל ביטול תוקף של דף. בנוסף, הוא לא יבצע יותר בקשת טעינה של הוספה לפני או אחרי, אם נדרש REFRESH, עד שבקשת ה-REFRESH תושלם בהצלחה. ‫(I6390b, ‏ b/162252536)
  • הבדיקה של API lint ל-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

External Contribution

  • תודה ל-‎ @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

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

תיקוני באגים

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

תרומה חיצונית

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

תיקוני באגים

  • מקורות של דפי Room (ו-PositionalDataSource) יציגו עכשיו מפריד מוביל כחלק מהדף הראשון, כך שהמשתמש לא צריך לגלול כדי לראות אותו. (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)
  • נוספו עומסים יתרים (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, כדי למנוע שימוש חוזר מקרי ב-PagingSources לא חוקיים, שגרמו לשגיאה לא ברורה (I99809, b/158486430)
  • כשלים מ-RemoteMediator REFRESH כבר לא מונעים את הטעינה של PagingSource ‏ (I38b1b, ‏ b/158892717)
  • הגרסה של submitData שלא גורמת להשעיה כבר לא גורמת לקריסה בגלל איסוף מקביל בכמה PagingData כשמפעילים אותה אחרי הגרסה של submitData שגורמת להשעיה. ‫(I26358, ‏ b/158048877)
  • תוקן חריג מסוג "cannot collect twice from pager" שיכול להתרחש אחרי שינוי בהגדרות האישיות (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 של Paging הושקה בטעות מענף שהוגדר באופן שגוי, וחשפה ממשקי 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 מתרכזות עכשיו סביב הגישה האחרונה כשהפלייסולדרים מושבתים

גרסה 2.1.0

גרסה 2.1.0

‫25 בינואר 2019

גרסה 2.1.0 של Paging הושקה ללא שינויים מגרסה 2.1.0-rc01.

גרסה ‎2.1.0-rc01

‫6 בדצמבר 2018

גרסה 2.1.0-rc01 של Paging הושקה ללא שינויים מגרסה 2.1.0-beta01.

גרסה ‎2.1.0-beta01

‫1 בנובמבר 2018

Paging 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() נוסף כדי שתדעו כמה פריטים יש בזיכרון. שימו לב שערך ההחזרה תמיד שווה ל-.size() אם הפלייסהולדרים מושבתים.

תיקוני באגים

  • תוקן מרוץ תהליכים (race condition) שמתרחש כשמבצעים השוואה (diffing) אם נעשה שימוש חוזר ברשימות 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

תיקוני באגים

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

יחסי תלות לפני 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

גרסה 1.0.1 של Paging הושקה עם תיקון באג אחד ב-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 גרסה מועמדת להפצה

אין לנו עוד בעיות מוכרות או תכונות חדשות שמתוכננות לגרסה 1.0.0 של Paging. כדאי לשדרג את הפרויקטים לגרסה 1.0.0-rc1 ולעזור לנו לבדוק אותה כדי שנוכל להשיק גרסה יציבה של 1.0.0.

אין שינויים בגרסה הזו, היא זהה לגרסה 1.0.0-beta1.

גרסה ‎1.0.0-beta1

‫5 באפריל 2018

‫Paging תהיה בגרסת בטא לזמן קצר לפני שתתקדם לגרסה מועמדת להפצה. אנחנו לא מתכננים שינויים נוספים ב-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 כדי להבהיר את התפקיד של מנהלי הביצוע ב-builders:

    • השם של 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.

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

שינויים ב-API

  • לאובייקטים מסוג DataSource.LoadParams יש עכשיו פונקציית constructor ציבורית, ואובייקטים מסוג DataSource.LoadCallback הם עכשיו אבסטרקטיים. כך אפשר לעטוף DataSource או לבדוק ישירות DataSource באמצעות קריאה חוזרת מדומה. b/72600421
  • ‫Mappers for DataSource and DataSource.Factory
    • ‫map(Function<IN,OUT>) מאפשרת לכם לשנות, לעטוף או לקשט תוצאות שנטענו על ידי DataSource.
    • mapByPage(<List<IN>,List<OUT>>) מאפשר את אותו הדבר לעיבוד ברצף (למשל, אם פריטים שנטענו מ-SQL צריכים בנוסף לשלוח שאילתה למסד נתונים נפרד, אפשר לעשות את זה כרצף).
  • השיטה PagedList#getDataSource() נוספת כשיטה נוחה b/72611341
  • כל המחלקות שהוצאו משימוש הוסרו מה-API, כולל השאריות של חבילת recyclerview.extensions וה-LivePagedListProvider.
  • הסמל DataSource.Factory משתנה מממשק למחלקה מופשטת כדי לאפשר פונקציונליות של מפה.

תיקוני באגים

  • הגדרת Builders כ-final. b/70848565
  • הטמעת Room DataSource תוקנה כך שתטפל בשאילתות של כמה טבלאות – התיקון הזה כלול ב-Room 1.1.0-beta1, כמו שמוסבר למעלה.
  • תוקן באג שבו לא הופעל BoundaryCallback.onItemAtEndLoaded עבור PositionalDataSource אם מופעלים פלייסהולדרים והגודל הכולל הוא כפולה מדויקת של גודל הדף.

גרסה 1.0.0-alpha5

‫22 בינואר 2018

תיקוני באגים

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