חלוקה לדפים
בטבלה הזו מפורטים כל פריטי המידע בקבוצה androidx.paging.
| פריט מידע שנוצר בתהליך פיתוח (Artifact) | גרסה יציבה | גרסה מועמדת להפצה | גרסת בטא | גרסת אלפא |
|---|---|---|---|---|
| paging-* | 3.5.3 | - | - | - |
| paging-compose | 3.5.3 | - | - | - |
הצהרה על יחסי תלות
כדי להוסיף תלות ב-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) { ... } }- לשלב את Flow של
בנוסף, פריט המידע שנוצר בתהליך הפיתוח (artifact) של
paging-commonהוסיף ממשקי API שלPager.appendו-Pager.prependכדי להפעיל באופן ידני טעינות בכל אחד מהקצוות של הפריטים שנטענו.- כשמשתמשים בו עם
paging-runtimeאוpaging-compose, הוא מספק חלופה לטעינת נתונים נוספים מלבד גלילה - כשמשתמשים בו עם
asStateAPI החדש, זו הדרך היחידה לטעון עוד נתונים
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. - נוסף
PagingStateAPIclosestItemAroundPositionחדש לאחזור הפריט שנטען הכי קרוב למיקום היעד ומתאים לפרדיקט הקלט. אפשר להשתמש בזה כדי ליצור מפתחות רענון מבוססי-פריטים, כשפריט העוגן האידיאלי נמצא בסביבה אבל לא במיקום המדויק של היעד.
גרסה 3.4.0-rc01
14 בינואר 2026
androidx.paging:paging-*:3.4.0-rc01 מופץ. גרסה 3.4.0-rc01 מכילה את ה-commits האלה.
תכונות חדשות
- הוסרה התמיכה בפלטפורמות 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 מכילה את ה-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
- הוספנו
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) ובאינטרנט (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
- העברת ברירת המחדל של 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
- עכשיו אפשר להגדיר את
placeholdersBeforeו-placeholdersAfterב-PagingData.from. חשוב לזכור שגלילה בין הפלייסהולדרים האלה לא מפעילה טעינות. (I06983)
גרסה 3.4.0-alpha01
2 ביולי 2025
androidx.paging:paging-*:3.4.0-alpha01 מופץ. גרסה 3.4.0-alpha01 מכילה את השמירות האלה.
תכונות חדשות
- ב-Paging נוספו יעדי KMP הבאים: 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)
- תוקן קריסה שקרתה בזמן גלילה במהלך רענון של פריטי Paging. (I8c65a, b/347649763)
גרסה 3.3
גרסה 3.3.6
12 בפברואר 2025
androidx.paging:paging-*:3.3.6 מופץ. גרסה 3.3.6 מכילה את השמירות האלה.
תיקוני באגים
- אותות של רענון וניסיון חוזר שנשלחים במהלך רענון ראשוני יישמרו עכשיו ויישלחו מחדש באופן אוטומטי ברגע שהמציג של Paging יהיה מוכן.
תרומה חיצונית
גרסה 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, בהתאמה. בנוסף, הוספנו שיטת הרחבה חדשה של KotlinawaitNotLoading()ב-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
- תודה ל-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 מכילה את השמירות האלה.
תיקוני באגים
- תוקנה בעיה שבה ה-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
גרסה 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
- הסרנו את ממשקי ה-API
items(LazyPagingItems)ו-itemsIndexed(LazyPagingItems)שהוצאו משימוש מ-Paging Compose. בנתוני הגרסה של Paging Compose1.0.0-alpha20מופיעה דוגמה לממשקי ה-API שמחליפים אותם. (I9626e)
גרסה 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-testingAPI חדש של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 הראשי כדי להריץ בדיקות של
asSnapshotPaging. ההגדרה הזו לא משנה יותר את אופן הפעולה של הבדיקה. (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)
תכנים ששותפו על ידי משתמשים חיצוניים
- תודה ל-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
- הארטיפקט
paging-testingמכיל עכשיו את ה-methodasPagingSourceFactoryליצירת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>ישיר. הפונקציה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. מידע נוסף זמין במאמר בנושא בדיקת שגרות משנה (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 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 מכילה את השינויים האלה.
תכונות חדשות
- Paging מספק עכשיו יומנים באמצעות המחלקות
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 מכילה את השמירות האלה.
תיקוני באגים
- תוקן מצב מרוץ (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>.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ב-APIs של המציג לא שולחים יותר באופן מיותר אתCombinedLoadStatesהראשוני שתמיד כולל מצבים של מתווך שמוגדרים ל-nullומצבים של מקור שמוגדרים ל-NotLoading(endOfPaginationReached = false). כלומר:- אם משתמשים ב-RemoteMediator, המצבים של ה-mediator תמיד יאוכלסו.
- רישום של מאזין 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 דרך נתיבי תאימות isInvalidcall במהלך ההפעלה של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
- תמיכה מעולה בשגרות המשך (coroutine) וב-Flow ב-Kotlin.
- תמיכה בטעינה אסינכרונית באמצעות פונקציות השהיה של קורוטינות, 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של 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יהיה פרטי.
תיקוני באגים
LivePagedListBuildertriggers initialPagedListload 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