חלוקה לדפים
בטבלה הזו מפורטים כל פריטי המידע בקבוצה androidx.paging.
| פריט מידע שנוצר בתהליך פיתוח (Artifact) | גרסה יציבה | גרסה מועמדת להפצה | גרסת בטא | גרסת אלפא |
|---|---|---|---|---|
| paging-* | 3.4.0 | - | - | - |
| paging-compose | 3.4.0 | - | - | - |
הצהרה על יחסי תלות
כדי להוסיף תלות ב-Paging, צריך להוסיף את מאגר Google Maven לפרויקט. מידע נוסף זמין במאמר בנושא מאגר Maven של Google.
אתם יכולים להוסיף את יחסי התלות של הארטיפקטים שאתם צריכים בקובץ build.gradle של האפליקציה או המודול:
Groovy
dependencies { def paging_version = "3.4.0" 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.4.0" }
Kotlin
dependencies { val paging_version = "3.4.0" 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.4.0") }
מידע על שימוש בתוספי Kotlin זמין במסמכי התיעוד של ktx.
מידע נוסף על יחסי תלות זמין במאמר הוספת יחסי תלות ב-build.
משוב
המשוב שלכם עוזר לנו לשפר את Jetpack. נשמח לדעת אם גיליתם בעיות חדשות או אם יש לכם רעיונות איך לשפר את הספרייה הזו. כדאי לעיין בבעיות הידועות בספרייה הזו לפני שמדווחים על בעיה. כדי להוסיף הצבעה בדיווח על בעיה קיימת, לוחצים על כפתור הכוכב.
מידע נוסף זמין במאמרי העזרה בנושא Issue Tracker.
גרסה 3.4
גרסה 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 ו-Desktop), ב-Native (Linux, iOS, watchOS, tvOS, macOS, MinGW) וב-Web (JavaScript, WasmJS) -
paging-common,paging-testingו-paging-composeהסירה את התמיכה ב-macosX64,iosX64,watchosX64ו-tvosX64בהתאם להוצאה משימוש של יעדי macosX64 על ידי Jetbrains. - נוסף
PagingStateAPIclosestItemAroundPositionחדש לאחזור הפריט שנטען הכי קרוב למיקום היעד ומתאים לפרדיקט הקלט. אפשר להשתמש בזה כדי ליצור מפתחות רענון מבוססי-פריטים, כשפריט העוגן האידיאלי נמצא בסביבה אבל לא במיקום היעד המדויק.
גרסה 3.4.0-rc01
14 בינואר 2026
androidx.paging:paging-*:3.4.0-rc01 מופץ. גרסה 3.4.0-rc01 מכילה את השמירות האלה.
תכונות חדשות
- הסרנו את התמיכה בפלטפורמות הבאות של KMP:
macosX64, iosX64, watchosX64ו-tvosX64, כדי להתאים להוצאה משימוש של יעדי macosX64 על ידי Jetbrains. (7cb9a4)
גרסה 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
- נוסף
PagingStateAPIclosestItemAroundPositionחדש לאחזור הפריט שנטען הכי קרוב למיקום היעד ומתאים לפרדיקט הקלט. אפשר להשתמש בזה כדי ליצור מפתחות רענון מבוססי-פריטים, כשפריט העוגן האידיאלי נמצא בסביבה אבל לא במיקום היעד המדויק. (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)
- במסגרת בדיקות ה-Paging נוספו יעדים חדשים של 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
- העברת ברירת המחדל של minSdk מ-API 21 ל-API 23 (Ibdfca, b/380448311, b/435705964, b/435705223)
גרסה 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 מכילה את השמירות האלה.
תכונות חדשות
- הוספנו את יעדי ה-KMP הבאים ל-Paging: watchos, tvos, mingwX64, watchosDeviceArm64 ו-linuxArm64. (I237dd, Ia62b3, b/368046982, Icf15d, b/364652024, I139d3, b/338268719)
תיקוני באגים
- בדיקות יחידה ב-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
גרסה 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, בלי להשתמש בממשקי API פנימיים של Paging או ב-paging-runtimeשלAsyncPagingDataDiffer. - נוספו methods חדשות של
LoadStatesו-CombinedLoadStatesב-hasErrorוב-isIdleכדי לבדוק אםLoadStatesנמצא במצב Error אוNotLoading, בהתאמה. בנוסף, הוספנו שיטת הרחבה חדשה של KotlinawaitNotLoading()ב-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 is released with no changes in 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 או ב-paging-runtimeשלAsyncPagingDataDiffer. (Id1f74, b/315214786) - נוספו ה-helper 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
- תודה ל-veyndan מ-Cash App על העזרה בהעברת Paging ל-Kotlin Multiplatform (#560, #561, #562, #573, #576, #577, #578, #579, #580, #581, #583, #584, #586, #609)
גרסה 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 מכילה את השמירות האלה.
תיקוני באגים
- תוקנה בעיה שבה
asSnapshot()API של ארטיפקט הבדיקה של החלוקה לדפים נתקע כשמועבר אליו Flow שנבנה באמצעותPagingData.from(List), כי ל-asSnapshot()לא היה מידע על סיום הטעינה (בניגוד ל-PagingData.from(List, LoadStates)overload). הפתרון העקיף הזה פועל רק בתהליכי עבודה שאפשר להשלים (למשל,flowOf(PagingData.from(...))). בתהליכי עבודה שלא ניתן להשלים (למשל, 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
- הגענו ליציבות של API ב-Paging Compose, והוא מוזג בחזרה לשאר Paging, כך שהגרסה שלו תהיה זהה לכל שאר הארטיפקטים של Paging. השינויים מאז גרסה 3.1.0 כוללים:
- תמיכה בתצוגה מקדימה של רשימת נתונים פיקטיביים על ידי יצירת
PagingData.from(fakeData)וצירוףPagingDataל-MutableStateFlow(לדוגמה,MutableStateFlow(PagingData.from(listOf(1, 2, 3)))). מעבירים את התהליך הזה לרכיבי@Previewcomposable כמקבל שלcollectAsLazyPagingItems()כדי להציג תצוגה מקדימה. - תמיכה בכל הפריסות של טעינה עצלה, כמו
LazyVerticalGridו-HorizontalPager, וגם ברכיבים מותאמים אישית של טעינה עצלה מהספריות של 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ממשקי API להמרתFlow<List<Value>>אוList<Value>סטטי ל-PagingSourceFactoryשאפשר להעביר ל-Pager בבדיקות asSnapshotתוסף Kotlin ב-Flow<PagingData<Value>>, שמתרגם אתFlow<PagingData<Value>>ל-List<Value>ישיר. asSnapshot lambdaמאפשר לחקות את ממשק המשתמש של האפליקציה באמצעות ממשקי API כמוscrollToאוappendScrollWhile, כדי שתוכלו לוודא שהתמונה של הנתונים נכונה בכל שלב בסט הנתונים המחולק לדפים.
- מחלקה
- נוספו יומני ברירת מחדל לחשיפת מידע על ניפוי באגים של החלפה (Paging) בשתי רמות:
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
גרסה 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
- הסרנו את ממשקי ה-API שהוצאו משימוש
items(LazyPagingItems)ו-itemsIndexed(LazyPagingItems)מ-Paging Compose. דוגמה לממשקי ה-API החלופיים מופיעה בהערות הגרסה של Paging Compose1.0.0-alpha20. (I9626e)
גרסה 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-testingAPI חדש שלList<Value>.asPagingSourceFactory()כדי לקבלPagingSourceFactoryשנטען רק מרשימה קבועה של נתונים. עדיין צריך להשתמש בתוסף הקיים ב-Flow<List<Value>>לבדיקה עם כמה דורות של נתונים סטטיים. (Id34d1, b/280655188)
שינויים ב-API
- כל ממשקי ה-API הציבוריים ב-paging-testing מסומנים עכשיו ב-
@VisibleForTestingכדי להבטיח שהשימוש בהם יתבצע רק בבדיקות. (I7db6e) - ב-
asSnapshotAPI כבר לא צריך להעבירCoroutineScope. ההגדרה שמוגדרת כברירת מחדל היא שימוש בהקשר שמועבר בירושה מההיקף של רכיב האב. (Id0a78, b/282240990) - שינוי הסדר של פרמטרים של בנאי
TestPagerכך שיתאים באופן אינטואיטיבי לסדר של פרמטרים של בנאיPagerאמיתי (I6185a) - העברנו את השימוש ב-lambda type
() -> PagingSource<Key, Value>ל-typePagingSourceFactory<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)
פריטי תוכן שהוספת
- תודה ל-Veyndan על העזרה בהרחקת Paging מפרטים ספציפיים של Android/JVM. (#525, #523, #520, #519, #507, #506, #505, #499, #497, #496, #493)
גרסה 3.2.0-alpha04
8 בפברואר 2023
androidx.paging:paging-*:3.2.0-alpha04 מופץ. גרסה 3.2.0-alpha04 מכילה את השמירות האלה.
בדיקות של חלוקה לדפים
- ארטיפקט
paging-testingמכיל עכשיו methodasPagingSourceFactoryליצירתpagingSourceFactoryמ-Flow<List<Value>>שיועבר ל-Pager. כלList<Value>>שמופק מהזרימה מייצג יצירה של נתונים עם מספור דפים. כך אפשר לבצע בדיקות של החלפת דפים, למשלPagingDataטרנספורמציות על ידי יצירת מקור נתונים פיקטיבי כדי שה-Pager יאסוף ממנו נתונים. (I6f230, b/235528239) הארטיפקט
paging-testingהורחב עם ממשקי API חדשים שמתאימים לאימות הנתונים שכלולים ב-Flow<PagingData<T>>. אפשר להשתמש בזה, לדוגמה, כדי לאשר את הפלט שלFlow<PagingData<T>>משכבת ViewModel.הפעולה הזו מתבצעת באמצעות
asSnapshotKotlin extension ב-Flow<PagingData<Value>>, שמתרגם אתFlow<PagingData<Value>>ל-List<Value>ישיר. הפונקציהasSnapshotlambda מאפשרת לחקות את ממשק המשתמש של האפליקציה באמצעות ממשקי 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 ומממשק המשתמש האמיתי שנדרשים בדרך כלל כדי לדמות את השילוב של הפעולה 'העברה לדף הבא' מקצה לקצה.
TestPager צריך להיחשב כזיוף – כפילת בדיקה שמשקפת את ההטמעה האמיתית של Pager תוך מתן ממשק API פשוט לבדיקת PagingSource. ממשקי ה-API האלה הם ממשקי suspend API, וצריך להריץ אותם בתוך runTest, כמו שמתואר במדריך בנושא בדיקת קורוטינות של Kotlin ב-Android.
דוגמה לשימוש בממשקי ה-API האלה אפשר למצוא בבדיקות של room-paging, שעברו רפקטורינג כדי להשתמש ב-TestPager.
שינויים ב-API
- הפעלה של איטרציה נוחה ב-
LoadResult.Page.dataדרךLoadResult.Page.iterator(). באופן עקיף, זה מאפשר שימוש בשיטה Kotlin standard libraryflattenכשמזינים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 shelladb 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 מכילה את השמירות האלה.
תיקוני באגים
- תוקן מצב מירוץ + דליפת זיכרון ב-cachedIn() במקרים שבהם נשלחו מספר אירועי טעינה על ידי Paging במורד הזרם, כשאין צופים או בין המקרים שבהם צופה עובר ל-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>.flowableAPIs כבר לא ניסיוניים. (Ie0bdd)
תיקוני באגים
- ב-LoadStates,
endOfPaginationReachedהוא עכשיו תמידfalseב-LoadType.REFRESH. בעבר, הערך של endOfPaginationReached היה יכול להיותtrueעבור RemoteMediatorREFRESH, אבל לא עבור 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ב-Presenter APIs כבר לא שולחים באופן מיותר אתCombinedLoadStatesהראשוני שתמיד כולל מצבי מתווך שמוגדרים ל-nullומצבי מקור שמוגדרים ל-NotLoading(endOfPaginationReached = false). זאת אומרת ש:- השדות של מצבי הגישור תמיד יאוכלסו אם משתמשים ב-RemoteMediator.
- רישום של מאזין חדש ל-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 של invalidate מוסרות עכשיו בצורה תקינה אחרי שהן מופעלות, כי מובטח שהן יופעלו פעם אחת לכל היותר. (I27e69)
- שליחת ערך placeholder ראשוני (InitialPagedList) מזרם PagedList חדש, למשל: הפונקציות LivePagedListBuilder או RxPagedListBuilder לא ינקו יותר נתונים שנרשמו בעבר.
גרסה 3.1.0-alpha02
1 ביולי 2021
androidx.paging:paging-*:3.1.0-alpha02 מופץ. גרסה 3.1.0-alpha02 מכילה את השמירות האלה.
תכונות חדשות
נוספו ממשקי API של מאזין ושל מציג זרימה של onPagesPresented, שמפעילים מיד אחרי שהדפים המוצגים מתעדכנים בממשק המשתמש.
מכיוון שהעדכונים האלה סינכרוניים עם ממשק המשתמש, אפשר להפעיל מתודות של המתאם כמו 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)
תיקוני באגים
- תוקנה בעיה שבה לפעמים, כשמשתמשים בדפדוף בין דפים, לא נשלחים אירועים של שינוי ל-RecyclerView, מה שעלול לגרום להפעלה מוקדמת של מאזינים מסוימים. (Ic507f, b/182510751)
External Contribution
- נוספו ממשקי API של תאימות PagedList שהוצאו משימוש לארטיפקט rxjava3 (Id1ce2, b/182497591)
פיתוח נייטיב של פייג'ינג גרסה 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 עם פריסות אחרות של lazy כמו LazyVerticalGrid, HorizontalPager או רכיבי lazy מותאמים אישית אחרים שסופקו על ידי ספריות 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 shelladb 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 Compose. דוגמה פשוטה לשימוש:
@Composable
@OptIn(ExperimentalLazyDsl::class)
fun ItemsDemo(flow: Flow<PagingData<String>>) {
val lazyPagingItems = flow.collectAsLazyPagingItems()
LazyColumn {
items(lazyPagingItems) {
Text("Item is $it")
}
}
}
גרסה 3.0.1
גרסה 3.0.1
21 ביולי 2021
androidx.paging:paging-*:3.0.1 מופץ. גרסה 3.0.1 מכילה את השמירות האלה.
תיקוני באגים
- הגישה אל
PagedList.dataSourceמהערך הראשוני שנוצר על ידיLivePagedListאוRxPagedListלא תגרום יותר לשגיאת IllegalStateException (I96707)
גרסה 3.0.0
גרסה 3.0.0
5 במאי 2021
androidx.paging:paging-*:3.0.0 מופץ. גרסה 3.0.0 מכילה את השמירות האלה.
התכונות העיקריות בגרסה 3.0.0
רוב ה-API הקיים מ-Paging 2.x.x הוצא משימוש לטובת ממשקי Paging 3 API החדשים, כדי להשיג את השיפורים הבאים:
- תמיכה מלאה ב-Kotlin coroutines וב-Flow
- תמיכה בביטול
- אותות מובנים של מצב הטעינה ושגיאות
- פונקציית ניסיון חוזר + רענון
- שלושת מחלקות המשנה של DataSource שולבו למחלקה מאוחדת של PagingSource
- המרות מותאמות אישית של דפים, כולל המרה מובנית להוספת מפרידים
- טעינה של כותרות עליונות ותחתונות
גרסה 3.0.0-rc01
21 באפריל 2021
androidx.paging:paging-*:3.0.0-rc01 מופץ. גרסה 3.0.0-rc01 מכילה את השמירות האלה.
תיקוני באגים
- תוקנה בעיה שבה לפעמים, כשמשתמשים בדפדוף בין דפים, לא נשלחים אירועים של שינוי ל-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)
- הפונקציה
DataSource.Factory.create()כבר לא נקראת באופן שגוי באופן סינכרוני בשרשור הראשי כשקוראים לפונקציה.build(), בבוני PagedList השונים (נתיב תאימות ישן). (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 חושפים עכשיו את ההערה הניסיונית שהם תלויים בה. אם אתם משתמשים ב-Rx compat wrappers ב-paging-rxjava2 או ב-paging-rxjava3, עכשיו תצטרכו להוסיף את ההערה
@OptIn(ExperimentalCoroutinesApi::class)(Ib1f9d) לשימושים.
תיקוני באגים
- תוקנה בעיה שגרמה לפעמים לשגיאה
IndexOutOfBoundsException: Inconsistency detectedכשמשתמשים בממשקי API של גרסה 2DataSourceדרך נתיבי תאימות - קריאות ל-
isInvalidבמהלך ההפעלה שלDataSourceכשמשתמשים בהן דרך נתיבי תאימות, מופעלות עכשיו בצורה נכונה ב-fetchDispatcher במקום בשרשור הראשי. התיקון הזה מתייחס ל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 כבר לא מופשטות, כי אף פעם לא היו להן שיטות מופשטות. (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 התאימות של Paging2.0,
.asPagingSourceFactory(), עלול לגרום לאתחול שלDataSourceב-CoroutineDispatcher שגוי. הפעולה הזו פותרת קריסה ומקרים אפשריים של ANR, במיוחד כשמשתמשים בהטמעה הנוכחית של PagingSource ב-Room, שמשתמשת בנתיב התאימות הזה.
גרסה 3.0.0-alpha10
2 בדצמבר 2020
androidx.paging:paging-*:3.0.0-alpha10 מופץ. גרסה 3.0.0-alpha10 מכילה את השמירות האלה.
שינויים ב-API
ממשקי ה-API
dataRefreshFlowו-dataRefreshListenerשהוצאו משימוש הוסרו כי הם מיותרים בעקבות עדכונים של loadStateFlow / Listener. למי שמבצע העברה, הפונקציה ששווה ל-loadStateFlow היא:loadStateFlow.distinctUntilChangedBy { it.refresh } .filter { it.refresh is NotLoading }(Ib5570, b/173530908)
תיקוני באגים
- הערך endOfPaginationReached עבור RemoteMediator
REFRESHמועבר עכשיו בצורה נכונה לעדכוני LoadState ומונע הפעלה שלAPPENDושלPREPENDמרחוק. (I94a3f, b/155290248) - הצגה של רשימה ריקה בגלל דף התחלתי ריק או סינון כבד לא תמנע יותר את הפעלת
PREPENDאו טעינות שלAPPEND. (I3e702, b/168169730) - תוקנה בעיה שבה הפונקציה
getRefreshKeyלא נקראה בדורות הבאים של PagingSource כשבוטלו תוקפים במהירות. (I45460, b/170027530)
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, אבל עם שיפורים בתזמון של הקריאה החוזרת של 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
- הבונה של 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) מקורות הנתונים של Paging יציגו עכשיו מפריד מוביל כחלק מהדף הראשון, כך שהמשתמש לא יצטרך לגלול כדי לראות אותו. (I6f747, b/160257628)
- גישה לפריטים במצייני מיקום מפעילה עכשיו באופן תקין טעינות של PagingSource עד שמוחזר דף שממלא את האינדקס המבוקש אחרי שהוא עובר טרנספורמציה על ידי PagingData.filter() (I95625, b/158763195)
- תיקון באג שבו לפעמים גלילה אחרי ש-PagingSource מחזיר שגיאה יכולה למנוע מ-PagingDataAdapter.retry() לנסות שוב. (I1084f, b/160194384)
- נפתרה בעיה שבה גישה לפריט אחרי שהדף נסגר לא טענה דפים, למרות שהגישה לפריט הייתה בטווח prefetchDistance (Ie95ae, b/160038730)
- הגדרת PagingConfig.maxSize כבר לא מפעילה placeholders אחרי אירוע של drop (I2be29, b/159667766)
גרסה 3.0.0-alpha02
24 ביוני 2020
androidx.paging:paging-*:3.0.0-alpha02 מופץ. גרסה 3.0.0-alpha02 מכילה את השמירות האלה.
שינויים ב-API
- נוספו עומסים יתרים לבונה של
PagingConfigעם ערכי ברירת מחדל נפוצים (I39c50, b/158576040) - נוספו עומסים יתרים עבור בנאים של
PagingDataAdapterושלAsyncPagingDataDifferעם ערכי ברירת מחדל נפוצים (Ie91f5) - ממשקי ה-API של המתאם,
dataRefreshFlowו-dataRefreshListener, מעבירים עכשיו ערך בוליאני כדי לציין אםPagingDataריק (I6e37e, b/159054196) - נוספו ממשקי 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) - תוקן החריג 'לא ניתן לאסוף פעמיים מ-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
- תמיכה ברמה גבוהה ב-Kotlin coroutines וב-Flow.
- תמיכה בטעינה אסינכרונית באמצעות פונקציות השעיה של קורוטינות, RxJava Single או פרימיטיבים של Guava ListenableFuture.
- אותות מובנים של מצב הטעינה ושגיאות לעיצוב ממשק משתמש רספונסיבי, כולל פונקציות של ניסיון חוזר ורענון.
- שיפורים בשכבת המאגר
- ממשק פשוט יותר למקורות נתונים
- חלוקה לעמודים פשוטה יותר ברשת ובמסד הנתונים
- תמיכה בנושא ביטול
- שיפורים בשכבת ההצגה
בעיות מוכרות
- עדיין אין מסמכי 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
לגרסאות של 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 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תהיה פרטית.
תיקוני באגים
LivePagedListBuildertriggers initialPagedListload on the specified executor, instead of the Arch Components IO thread pool.תוקנה התנהגות לא תקינה ב-wrappers פנימיים של
DataSource(שמשמשים להטמעה שלDataSource.mapוגם לטעינה של placeholder-disabledPositionalDataSource) 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>>)מאפשרת לעשות את אותו הדבר לעיבוד אצווה (למשל, אם פריטים שנטענו מ-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