חלוקה לדפים
בטבלה הזו מפורטים כל פריטי המידע בקבוצה androidx.paging
.
פריט מידע שנוצר בתהליך פיתוח (Artifact) | גרסה יציבה | גרסה מועמדת להפצה | גרסת בטא | גרסת אלפא |
---|---|---|---|---|
paging-* | 3.3.6 | - | - | 3.4.0-alpha01 |
paging-compose | 3.3.6 | - | - | 3.4.0-alpha01 |
הצהרה על יחסי תלות
כדי להוסיף תלות ב-Paging, צריך להוסיף את מאגר Google Maven לפרויקט. מידע נוסף זמין במאמר בנושא מאגר Maven של Google.
מוסיפים את יחסי התלות של הארטיפקטים שאתם צריכים בקובץ build.gradle
של האפליקציה או המודול:
מגניב
dependencies { def paging_version = "3.3.6" 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-alpha01" }
Kotlin
dependencies { val paging_version = "3.3.6" 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-alpha01") }
מידע על שימוש בתוספים של Kotlin זמין במסמכי התיעוד של ktx.
מידע נוסף על יחסי תלות זמין במאמר הוספת יחסי תלות של Build.
משוב
המשוב שלכם עוזר לנו לשפר את Jetpack. נשמח לשמוע מכם אם תגלו בעיות חדשות או אם יש לכם רעיונות לשיפור הספרייה הזו. לפני שיוצרים ספרייה חדשה, כדאי לעיין בבעיות הקיימות בספרייה הזו. כדי להוסיף את ההצבעה שלכם לבעיה קיימת, לוחצים על לחצן הכוכב.
מידע נוסף זמין במאמרי העזרה בנושא כלי המעקב אחר בעיות.
גרסה 3.4
גרסה 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-runtime
שלAsyncPagingDataDiffer
. - נוספו שיטות עזר חדשות
LoadStates
ו-CombinedLoadStates
ב-hasError
וב-isIdle
כדי לבדוק אםLoadStates
במצב שגיאה או במצבNotLoading
, בהתאמה. בנוסף, הוספנו שיטת הרחבה חדשה שלawaitNotLoading()
Kotlin ב-Flow<CombinedLoadStates>
שממתינה עד שהטעינה תסתיים במצבNotLoading
או במצב שגיאה. -
PagingData.empty()
שולח עכשיו מצביNotLoading
כברירת מחדל, אלא אם מעביריםLoadStates
מותאמים אישית ל-constructor שלו. ההתנהגות הזו שונה מההתנהגות הקיימת, שבה לא מתבצעת שליחה שלLoadStates
כשמגישים אותו ל-PagingDataAdapter
או שבה נשלחים מצבי טעינה כשמבצעים איסוף כ-LazyPagingItems
. כשמקבצים אותם כ-LazyPagingItems
, הם יוצגו עכשיו גם ברשימה ריקה מיד אחרי ההרכבה הראשונית.
תאימות ל-Kotlin Multiplatform
הספרייה Paging כוללת עכשיו ארטיפקטים שתואמים ל-Kotlin Multiplatform, בעיקר בזכות עבודה שבוצעה בפרויקט multiplatform-paging של CashApp.
-
paging-common
העביר את כל ממשקי ה-API של Paging 3 אלcommon
, ועכשיו הוא תואם ל-JVM ול-iOS בנוסף ל-Android. - הקוד של
paging-testing
הועבר אלcommon
ועכשיו הוא תואם ל-jvm ול-iOS בנוסף ל-Android. - הקוד של
paging-compose
הועבר אלcommon
, והוא כולל ארטיפקט של Android, בהתאם לתמיכה הרב-פלטפורמית שלandroidx.compose
. - האפליקציות
paging-runtime
,paging-guava
,paging-rxjava2
ו-paging-rxjava3
יישארו זמינות רק ב-Android.
גרסה 3.3.0-rc01
1 במאי 2024
androidx.paging:paging-*:3.3.0-rc01
יצא ללא שינויים ב-Paging 3.3.0-beta01. גרסה 3.3.0-rc01 מכילה את הקומטים האלה.
גרסה 3.3.0-beta01
3 באפריל 2024
הגרסה androidx.paging:paging-*:3.3.0-beta01
יוצאת ללא שינויים משמעותיים. גרסה 3.3.0-beta01 מכילה את הקומטים האלה.
גרסה 3.3.0-alpha05
20 במרץ 2024
androidx.paging:paging-*:3.3.0-alpha05
משוחרר. גרסה 3.3.0-alpha05 מכילה את הקומטים האלה.
שינויים ב-API
- הספרייה Paging משתמשת עכשיו בהערה
@MainThread
של AndroidX Annotation לקוד נפוץ. (I78f0d, b/327682438)
גרסה 3.3.0-alpha04
6 במרץ 2024
androidx.paging:paging-*:3.3.0-alpha04
משוחרר. גרסה 3.3.0-alpha04 מכילה את הקומטים האלה.
תיקוני באגים
- תוקנו שגיאות קלות בתיעוד שקשורות להוספת תאימות ל-Kotlin multiplatform. (aosp/2950785)
גרסה 3.3.0-alpha03
7 בפברואר 2024
androidx.paging:paging-*:3.3.0-alpha03
משוחרר. גרסה 3.3.0-alpha03 מכילה את הקומיטים האלה.
תכונות חדשות
- הכיתה
PagingDataPresenter
היא עכשיו כיתה ציבורית. אפשר עכשיו ליצור רכיבי הצגה מרובי פלטפורמות על בסיסPagingDataPresenter
, בלי להשתמש בממשקי API פנימיים של החלפת דפים או ב-paging-runtime
שלAsyncPagingDataDiffer
. (Id1f74, b/315214786) - נוספו שיטות עזר חדשות
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
ופריטי מידע מסוג*-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
- הספרייה Paging Compose הגיעה ליציבות API והיא מוזגה בחזרה אל שאר הספרייה Paging, כך שהגרסה שלה תואמת עכשיו לכל שאר הארטיפקטים של Paging. השינויים מאז גרסה 3.1.0 כוללים:
- תמיכה בתצוגה מקדימה של רשימת נתונים פיקטיביים על ידי יצירת
PagingData.from(fakeData)
ושימוש ב-PagingData
בתוךMutableStateFlow
(לדוגמה,MutableStateFlow(PagingData.from(listOf(1, 2, 3)))
). מעבירים את התהליך הזה לרכיבים הניתנים להרכבה@Preview
כמקבל שלcollectAsLazyPagingItems()
כדי להציג תצוגה מקדימה. - תמיכה בכל הפריסות העצלניות כמו
LazyVerticalGrid
ו-HorizontalPager
, וגם ברכיבים עצלניים בהתאמה אישית מהספריות של Wear ו-TV. השיפור הזה הושג באמצעות שיטות חדשות להרחבתLazyPagingItems
ברמה נמוכה יותרitemKey
ו-itemContentType
, שעוזרות לכם להטמיע את הפרמטריםkey
ו-contentType
בממשקי ה-API הרגילים שלitems
שכבר קיימים עבורLazyColumn
,LazyVerticalGrid
וגם בממשקי API מקבילים כמוHorizontalPager
. - הוצאנו משימוש את
items(lazyPagingItems)
ו-itemsIndexed(lazyPagingItems)
, שתומכים רק ב-LazyListScope
.
- תמיכה בתצוגה מקדימה של רשימת נתונים פיקטיביים על ידי יצירת
-
paging-testing
Artifact חדש שמספק ממשקי API שנועדו לבדיקת יחידות של כל שכבה באפליקציה והשילוב שלה עם Paging בבידוד. לדוגמה, הוא כולל- מחלקה
TestPager
שמאפשרת לאמת את ההתנהגות של הטמעתPagingSource
מותאמת אישית באופן עצמאי מ-Pager ומממשק משתמש אמיתי. -
asPagingSourceFactory
APIs להמרתFlow<List<Value>>
אוList<Value>
סטטי ל-PagingSourceFactory
שאפשר להעביר ל-Pager בבדיקות -
asSnapshot
Kotlin extension onFlow<PagingData<Value>>
, which translates theFlow<PagingData<Value>>
into a directList<Value>
. asSnapshot lambda
מאפשרת לכם לחקות את ממשק המשתמש של האפליקציה באמצעות ממשקי API כמוscrollTo
אוappendScrollWhile
, כדי שתוכלו לוודא שתמונת המצב של הנתונים נכונה בכל נקודה בסט הנתונים המחולק לדפים.
- מחלקה
- נוספו יומני ברירת מחדל לחשיפת מידע על ניפוי באגים של החלפה בין דפים בשתי רמות:
VERBOSE
ו-DEBUG
. אפשר להפעיל את היומנים באמצעות הפקודהadb shell setprop log.tag.Paging [DEBUG|VERBOSE]
. ההגדרה הזו חלה גם על החלפת דפים עם תצוגות וגם על החלפת דפים עם כתיבה. - נוספו קונסטרקטורים ל-
PagingDataAdapter
ול-AsyncPagingDataDiffer
שמקבליםCoroutineContext
במקוםCoroutineDispatcher
. - הוספנו
PagingSourceFactory
ממשק פונקציונלי חדשPagingSource
שמספק משטח 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 מכילה את הקומיטים האלה.
Paging Compose
- הגרסה של Paging Compose הגיעה רשמית ליציבות API. לכן, הגרסה עודכנה מ-
1.0.0-alpha20
כך שתתאים לגרסה של כל שאר הארטיפקטים של Paging.
שינויים ב-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
, שמספק משטח API מפורש יותר מאשר פונקציות ה-lambda הקיימות,() -> PagingSource
. אפשר להשתמש במפעל הזה כדי ליצור מופע שלPager
. (I33165, b/280655188) - נוסף
paging-testing
API חדש שלList<Value>.asPagingSourceFactory()
כדי לקבלPagingSourceFactory
שנטען רק מרשימת נתונים שלא ניתן לשנות. עדיין צריך להשתמש בתוסף הקיים ב-Flow<List<Value>>
לבדיקה עם נתונים סטטיים מכמה דורות. (Id34d1, b/280655188)
שינויים ב-API
- כל ממשקי ה-API הציבוריים בבדיקת החלוקה לדפים (paging) מסומנים עכשיו ב-
@VisibleForTesting
כדי להבטיח שממשקי ה-API האלה ישמשו רק בבדיקות. (I7db6e) - ב-
asSnapshot
API כבר לא צריך להעבירCoroutineScope
. עכשיו, כברירת מחדל, הוא משתמש בהקשר שעבר בירושה מההיקף של רכיב האב. (Id0a78, b/282240990) - שינוי הסדר של פרמטרים של בנאי
TestPager
כך שיתאים באופן אינטואיטיבי לסדר של פרמטרים של בנאיPager
אמיתי (I6185a) - העברנו את השימוש בבדיקות החלוקה לדפים מסוג lambda
() -> PagingSource<Key, Value>
לסוגPagingSourceFactory<Key, Value>
. (I4a950, b/280655188)
שינויים בהתנהגות
- כבר לא נדרש שולח ראשי כדי להריץ
asSnapshot
בדיקות של החלפת דפים. הגדרה כזו לא משנה יותר את התנהגות הבדיקה. (Ie56ea)
גרסה 3.2.0-alpha05
3 במאי 2023
androidx.paging:paging-*:3.2.0-alpha05
משוחרר. גרסה 3.2.0-alpha05 מכילה את הקומיטים האלה.
שינויים ב-API
- ב-API של בדיקות החלוקה לדפים של
asSnapshot
, הפרמטרloadOperations
מוגדר עכשיו כברירת מחדל ל-lambda ריק. כך אפשר להתקשר אלasSnapshot
בלי להעביר פעולות טעינה כדי לאחזר את הנתונים מטעינת הרענון הראשונית. (Ied354, b/277233770)
שיפורים במסמכי התיעוד
- עדכנו את התיעוד בנושא
asPagingSourceFactory()
כדי להבהיר שמדובר בשיטת הרחבה ב-Flow
שמחזירה מפעל לשימוש חוזר ליצירת מופעים שלPagingSource
. (I5ff4f, I705b5) - עדכנו את התיעוד בנושא
LoadResult.Page
constructor כדי להבהיר את הצורך בביטול ההגדרה של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
מכיל עכשיו שיטהasPagingSourceFactory
ליצירתpagingSourceFactory
מ-Flow<List<Value>>
שיועבר ל-Pager. כלList<Value>>
שמופק מהזרימה מייצג יצירה של נתונים עם מספור דפים. כך אפשר לבצע בדיקות של החלפה בדפים, למשלPagingData
טרנספורמציות על ידי יצירת מקור נתונים פיקטיבי כדי שהרכיב Pager יוכל לאסוף ממנו נתונים. (I6f230, b/235528239) הרחבנו את ארטיפקט
paging-testing
עם ממשקי API חדשים שמתאימים לאימות הנתונים שכלולים ב-Flow<PagingData<T>>
. אפשר להשתמש בזה, למשל, כדי לאשר את הפלט שלFlow<PagingData<T>>
משכבת ViewModel.הפעולה הזו מתבצעת באמצעות
asSnapshot
Kotlin extension ב-Flow<PagingData<Value>>
, שמתרגם אתFlow<PagingData<Value>>
ל-List<Value>
ישיר. הפונקציהasSnapshot
lambda מאפשרת לחקות את ממשק המשתמש של האפליקציה באמצעות ממשקי API כמוscrollTo
אוappendScrollWhile
בצורה שניתנת לחזרה ועקבית, כך שתוכלו לוודא שתמונת המצב של הנתונים נכונה בכל נקודה בסט הנתונים המחולק לדפים.// Create your ViewModel instance val viewModel = … // Get the Flow of PagingData from the ViewModel val data< Flow<PagingData<String>> = viewModel.data val snapshot: List<String> = data.asSnapshot { // Each operation inside the lambda waits for the data to settle before continuing scrollTo(index = 50) // While you can’t view the items within the asSnapshot call, // you can continuously scroll in a direction while some condition is true // i.e., in this case until you hit a placeholder item appendScrollWhile { item: String -> item != “Header 1” } } // With the asSnapshot complete, you can now verify that the snapshot // has the expected values
asSnapshot
היא שיטתsuspend
שצפויה לפעול בתוךrunTest
. מידע נוסף זמין במאמר בנושא בדיקת קורוטינות של Kotlin ב-Android. (I55fd2, I5bd26, I7ce34, I51f4d, I2249f, Id6223, Ic4bab, Ib29b9, Ic1238, I96def, b/235528239)
שינויים ב-API
- קריאות לממשק המשתמש אל
getItem
ו-peek
ב-AsyncPagingDataDiffer
וב-PagingDataAdapter
מסומנות עכשיו בצורה נכונה כקריאות שאפשר לבצע רק בשרשור הראשי. (I699b6) - הוסרו תווים כלליים מסוגים גנריים שמשמשים את
TestPager
, כדי שיהיה קל יותר להשתמש בתוצאות של השיטות האלה בקוד שנכתב בשפת התכנות Java. (I56c42)
גרסה 3.2.0-alpha03
24 באוקטובר 2022
androidx.paging:paging-*:3.2.0-alpha03
משוחרר. גרסה 3.2.0-alpha03 מכילה את הקומיטים האלה.
בדיקת חלוקה לדפים
הגרסה הזו כוללת פריט מידע חדש שנוצר בתהליך פיתוח (Artifact): paging-testing
. הארטיפקט הזה מספק ממשקי API שנועדו לבדיקת יחידות של כל שכבה באפליקציה והשילוב שלה עם Paging בבידוד.
לדוגמה, הגרסה הראשונה הזו כוללת מחלקה TestPager
שמאפשרת לאמת את ההתנהגות של הטמעה מותאמת אישית של PagingSource
באופן עצמאי מ-Pager
ומממשק המשתמש האמיתי שנדרשים בדרך כלל כדי לדמות את השילוב של פתרון ה-Paging מקצה לקצה.
TestPager
צריך להיחשב כזיוף – test double שמשקף את ההטמעה האמיתית של 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 shell
adb shell setprop log.tag.Paging [DEBUG|VERBOSE].
(b/235527159)
תיקוני באגים
- תוקנה השגיאה החסרה של בנאי
PagingDataDiffer
כשמשתמשים ב-paging-common:3.2.0-alpha01
עם זמן ריצהpaging-runtime:3.1.1
או גרסה ישנה יותר.(b/235256201)
גרסה 3.2.0-alpha01
1 ביוני 2022
androidx.paging:paging-*:3.2.0-alpha01
משוחרר. גרסה 3.2.0-alpha01 מכילה את הקומיטים האלה.
שינויים ב-API
- נוספו קונסטרקטורים ל-
PagingDataAdapter
ול-AsyncPagingDataDiffer
שמקבליםCoroutineContext
במקוםCoroutineDispatcher
. (Idc878) - כברירת מחדל,
PagingData.from()
ו-PagingData.empty()
לא ישפיעו יותר עלCombinedLoadStates
בצד של המציג. נוסף עומס יתר חדש שמאפשר להעביר אתsourceLoadStates
ואתremoteLoadStates
אל הבנאים האלה, כדי לשמור על ההתנהגות הקיימת של הגדרתLoadStates
כסופית לחלוטין (כלומר,NotLoading(endOfPaginationReached = false)
), עם אפשרות לכלול גם מדינות מרוחקות אם צריך. אם לא יעברוLoadStates
, אזCombinedLoadStates
הקודם יישמר בצד של המציג כשהוא יקבל אתPagingData
הסטטי. (Ic3ce5, b/205344028)
תיקוני באגים
- התוצאה של
PagingSource.getRefreshKey()
מקבלת עכשיו עדיפות על פניinitialKey
במקרים שבהם היא מחזירה ערך null, אבל הוגדר ערךinitialKey
שאינו null. (Ic9542, b/230391606)
External Contribution
- בוצע עדכון של :compose:ui:ui-test api (updateApi) בעקבות העברה של test-coroutines-lib (I3366d)
גרסה 3.1
גרסה 3.1.1
9 במרץ 2022
androidx.paging:paging-*:3.1.1
משוחרר. גרסה 3.1.1 מכילה את הקומיטים האלה.
תיקוני באגים
- הוסרו אירועי
LoadState.NotLoading
ביניים בין דורות שהוזנו בצורה שגויה על ידי.cachedIn()
. השינוי הזה מקל מאוד על התגובה לשינויים בנתונים. הוא מסיר אירועים מיותרים שלLoadState.NotLoading
שנוצרו בין ניסיונות חוזרים לטעינה שנכשלה, בזמן רענון או במהלך ביטול.LoadState
גרסה 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 בזמן שאין observers או בין המקרים שבהם observer עובר ל-PagingData חדש. (Ib682e)
גרסה 3.1.0-beta01
13 באוקטובר 2021
androidx.paging:paging-*:3.1.0-beta01
משוחרר. גרסה 3.1.0-beta01 מכילה את הקומיטים האלה.
תיקוני באגים
- תוקנה בעיה שבה גישה מהירה לכמות גדולה של פריטים עלולה לגרום להם להיפסל מבדיקה ב-prefetchDistance, וכך לגרום לעיכוב בטעינת הדף. הבעיה הזו בולטת במיוחד כשפריטים רבים מוצגים בבת אחת בסדר שנותן עדיפות לטעינה בהתאם לכיוון הגלילה של המשתמש. הגישה לפריטים האלה עוברת כעת דרך מאגר זמני, והיא מקבלת עדיפות באופן סינכרוני כדי למנוע את השמטתם. (aosp/1833273)
גרסה 3.1.0-alpha04
29 בספטמבר 2021
androidx.paging:paging-*:3.1.0-alpha04
משוחרר. גרסה 3.1.0-alpha04 מכילה את הקומיטים האלה.
שינויים ב-API
-
Flow<PagingData>.observable
ו-Flow<PagingData>.flowable
APIs כבר לא ניסיוניים. (Ie0bdd)
תיקוני באגים
- ב-LoadStates, הערך של
endOfPaginationReached
הוא עכשיו תמידfalse
ב-LoadType.REFRESH
. בעבר, הערך של endOfPaginationReached היה יכול להיותtrue
עבור 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
בממשקי API של רכיב הצגת המודעות לא שולחים יותר באופן מיותר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)
Paging Compose Version 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
adb shell setprop log.tag.Paging [DEBUG|VERBOSE]
. ([b/235527159}(https://issuetracker.google.com/issues/235527159))
תיקוני באגים
- תוקנה השגיאה של מחלץ ה-
PagingDataDiffer
שחסר כשמשתמשים ב-paging-compose:1.0.0-alpha15
עםpaging-common:3.1.1
או גרסאות קודמות.(b/235256201,b/239868768)
גרסה 1.0.0-alpha15
1 ביוני 2022
androidx.paging:paging-compose:1.0.0-alpha15
משוחרר. גרסה 1.0.0-alpha15 מכילה את הקומיטים האלה.
שינויים ב-API
- נוספו קונסטרקטורים ל-
PagingDataAdapter
ול-AsyncPagingDataDiffer
שמקבליםCoroutineContext
במקוםCoroutineDispatcher
. (Idc878)
תיקוני באגים
- ב-
LazyPagingItems
, הרענון הראשוני שלloadState
מוגדר עכשיו ל-LoadState.Loading
. (I55043, b/224855902)
גרסה 1.0.0-alpha14
13 באוקטובר 2021
androidx.paging:paging-compose:1.0.0-alpha14
משוחרר. גרסה 1.0.0-alpha14 מכילה את הקומיטים האלה.
גרסה 1.0.0-alpha13
29 בספטמבר 2021
androidx.paging:paging-compose:1.0.0-alpha13
משוחרר. גרסה 1.0.0-alpha13 מכילה את הקומיטים האלה.
שינויים ב-API
- הפונקציה
LazyPagingItems.snapshot()
הוחלפה במאפייןLazyPagingItems.itemSnapshotList
(Ie2da8) - האפשרות
LazyPagingItems.getAsState()
שהוצאה משימוש הוסרה (Ie65e4)
גרסה 1.0.0-alpha12
21 ביולי 2021
androidx.paging:paging-compose:1.0.0-alpha12
משוחרר. גרסה 1.0.0-alpha12 מכילה את הקומיטים האלה.
שינויים ב-API
- הפרמטרים
items(lazyPagingItems)
ו-itemsIndexed(lazyPagingItems)
שמשמשים לחיבור של Paging ל-LazyColumn/Row
מקבלים עכשיו את הפרמטר option 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
תואם רק ל-Compose מגרסה1.0.0-beta07
ואילך.
גרסה 1.0.0-alpha08
24 בפברואר 2021
androidx.paging:paging-compose:1.0.0-alpha08
משוחרר. גרסה 1.0.0-alpha08 מכילה את הקומיטים האלה.
העדכון בוצע כדי לשלב עם Compose 1.0.0-beta01.
גרסה 1.0.0-alpha07
10 בפברואר 2021
androidx.paging:paging-compose:1.0.0-alpha07
משוחרר. גרסה 1.0.0-alpha07 מכילה את הקומיטים האלה.
העדכון כולל שילוב עם Compose alpha12.
גרסה 1.0.0-alpha06
28 בינואר 2021
androidx.paging:paging-compose:1.0.0-alpha06
משוחרר. גרסה 1.0.0-alpha06 מכילה את הקומיטים האלה.
תיקוני באגים
העדכון תלוי ב-Compose 1.0.0-alpha11.
גרסה 1.0.0-alpha05
13 בינואר 2021
androidx.paging:paging-compose:1.0.0-alpha05
משוחרר. גרסה 1.0.0-alpha05 מכילה את הקומיטים האלה.
העדכון תלוי ב-Compose 1.0.0-alpha10.
גרסה 1.0.0-alpha04
16 בדצמבר 2020
androidx.paging:paging-compose:1.0.0-alpha04
משוחרר. גרסה 1.0.0-alpha04 מכילה את הקומיטים האלה.
תיקוני באגים
- העדכון של מאפייני הנוחות,
CombinedLoadStates.refresh
,CombinedLoadStates.prepend
,CombinedLoadStates.append
מאפשר מעבר רק מ-Loading
ל-NotLoading
אחרי שמצבי הטעינה של המתווך והמקור הםNotLoading
, כדי לוודא שהעדכון מרחוק הוחל. (I65619)
גרסה 1.0.0-alpha03
2 בדצמבר 2020
androidx.paging:paging-compose:1.0.0-alpha03
משוחרר. גרסה 1.0.0-alpha03 מכילה את הקומיטים האלה.
- העדכון בוצע בהתאם לגרסה Compose 1.0.0-alpha08.
גרסה 1.0.0-alpha02
11 בנובמבר 2020
androidx.paging:paging-compose:1.0.0-alpha02
משוחרר. גרסה 1.0.0-alpha02 מכילה את הקומיטים האלה.
שינויים ב-API
- נוספו שיטות
.peek()
,.snapshot()
,.retry()
ו-.refresh()
ל-LazyPagingItem
s שחושפות את אותה פונקציונליות שזמינה ב-AsyncPagingDataDiffer
/PagingDataAdapter
(Iddfe8, b/172041660)
גרסה 1.0.0-alpha01
28 באוקטובר 2020
androidx.paging:paging-compose:1.0.0-alpha01
משוחרר. גרסה 1.0.0-alpha01 מכילה את הקומיטים האלה.
תכונות חדשות
ארטיפקט paging-compose
מספק שילוב בין ספריית ההחלפה לדפים לבין Jetpack Compose. דוגמה פשוטה לשימוש:
@Composable
@OptIn(ExperimentalLazyDsl::class)
fun ItemsDemo(flow: Flow<PagingData<String>>) {
val lazyPagingItems = flow.collectAsLazyPagingItems()
LazyColumn {
items(lazyPagingItems) {
Text("Item is $it")
}
}
}
גרסה 3.0.1
גרסה 3.0.1
21 ביולי 2021
androidx.paging:paging-*:3.0.1
משוחרר. גרסה 3.0.1 מכילה את הקומיטים האלה.
תיקוני באגים
- הגישה אל
PagedList.dataSource
מהערך הראשוני שנוצר על ידיLivePagedList
אוRxPagedList
לא תגרום יותר לשגיאה לא תקינה מסוג IllegalStateException (I96707)
גרסה 3.0.0
גרסה 3.0.0
5 במאי 2021
androidx.paging:paging-*:3.0.0
משוחרר. גרסה 3.0.0 מכילה את הקומיטים האלה.
תכונות עיקריות בגרסה 3.0.0
רוב ממשקי ה-API הקיימים מ-Paging 2.x.x הוצאו משימוש לטובת ממשקי ה-API החדשים של Paging 3, כדי להוסיף את השיפורים הבאים:
- תמיכה מלאה ב-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()
לא נקראת יותר באופן שגוי ובאופן סינכרוני על ה-Main thread כשקוראים לפונקציה.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
- עכשיו, רכיבי ה-wrapper Rx2 ו-Rx3 חושפים את ההערה הניסיונית שהם תלויים בה. אם אתם משתמשים ב-Rx compat wrappers ב-paging-rxjava2 או ב-paging-rxjava3, עכשיו תצטרכו להוסיף הערות לשימושים עם
@OptIn(ExperimentalCoroutinesApi::class)
(Ib1f9d)
תיקוני באגים
- תוקנה הבעיה שגורמת לשגיאה
IndexOutOfBoundsException: Inconsistency detected
לפעמים כשמשתמשים בממשקי API מגרסה 2DataSource
דרך נתיבי תאימות - קריאות ל-
isInvalid
במהלך ההפעלה שלDataSource
כשמשתמשים בהן דרך נתיבי תאימות, מופעלות עכשיו בצורה נכונה ב-fetchDispatcher במקום ב-main thread. התיקון הזה פותרIllegalStateException
שנובע מגישה ל-Db ב-thread הראשי כשמשתמשים בהטמעה שלPagingSource
ב-Room.
גרסה 3.0.0-alpha13
27 בינואר 2021
androidx.paging:paging-*:3.0.0-alpha13
משוחרר. גרסה 3.0.0-alpha13 מכילה את הקומיטים האלה.
שינויים ב-API
PagingSource.getRefreshKey
היא כבר לא אופציונלית להטמעה, היא עכשיו פונקציה מופשטת ללא הטמעה שמוגדרת כברירת מחדל. משתמשים שמעבירים נתונים יכולים להמשיך להחזיר את הטמעת ברירת המחדל, שמחזירה פשוט את הערךnull
, אבלgetRefreshKey()
צריכה להיות הטמעה אמיתית שמחזירה מפתח על סמך מיקום הגלילה הנוכחי של המשתמש, שמאפשר לטעינת הדפים להמשיך להתבצע במרכז אזור התצוגה באמצעותPagingState.anchorPosition
אם אפשר. (I4339a)- הכיתה
InvalidatingPagingSourceFactory
היא עכשיו כיתה סופית (Ia3b0a) - אפשר להגדיר את אופן הפעולה של מפריד המסוף (כותרת עליונה / תחתונה) באמצעות פרמטר אופציונלי נוסף SeparatorType. יש שתי אפשרויות:
-
FULLY_COMPLETE
– התנהגות קיימת; צריך להמתין עד ש-PagingSource ו-RemoteMediator יסמנו את endOfPaginationReached לפני שמוסיפים מפרידי מסוף. אם לא משתמשים ב-RemoteMediator, המערכת מתעלמת מ-remote loadState. האפשרות הזו שימושית בעיקר אם רוצים להציג מפרידי קטעים רק כשהקטע נטען במלואו, כולל אחזור ממקור מרוחק, למשל מהרשת. -
SOURCE_COMPLETE
– המתנה רק עד ש-PagingSource יסמן את endOfPaginationReached, גם אם נעשה שימוש ב-RemoteMediator. כך הכותרות העליונות והתחתונות מוצגות באופן סינכרוני עם הטעינה הראשונית, והמשתמשים לא צריכים לגלול כדי לראות את המפרידים של המסוף. (Ibe993, b/174700218)
-
תיקוני באגים
- תוקנה דליפת זיכרון נדירה שמתרחשת כש-PagingSource מוצא מחוץ לתוקף לפני ש-PageFetcher יכול להתחיל לטעון ממנו. (I9606b, b/174625633)
גרסה 3.0.0-alpha12
13 בינואר 2021
androidx.paging:paging-*:3.0.0-alpha12
משוחרר. גרסה 3.0.0-alpha12 מכילה את הקומיטים האלה.
שינויים ב-API
- המחלקות InvalidatingPagingSourceFactory כבר לא מופשטות, כי אף פעם לא היו להן שיטות מופשטות. (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 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 updates. למי שמבצע העברה, המקבילה ל-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). בנוסף, תוקן באג שבו לא בוצעו קריאות חוזרות (callbacks) לגרסת kotlin של invalidate אחרי טרנספורמציה על ידי.map
או.mapByPage
. (I1f244, b/165313046)
תיקוני באגים
- האינטראקציה של Paging עם ViewPager השתפרה באופן משמעותי. ספציפית, הפעולה 'העברה לדף הבא' לא תבטל יותר קריאה ל-
RemoteMediator#load
בגלל פסילת דף. בנוסף, אם נדרשת רענון, המערכת לא תשלח יותר בקשת טעינה של הוספה או הוספה לפני, עד שבקשת הרענון תושלם בהצלחה. (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
- אופרטורים של 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>)
כדי לאפשר הצגה של רשימות סטטיות, שאפשר לשלב עם זרימת הנתונים הכוללת של 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)
תיקוני באגים
- ב-PagingSources של חדרים (ו-PositionalDataSource) יוצג עכשיו מפריד מוביל כחלק מהדף הראשון, כך שהמשתמש לא יצטרך לגלול כדי לראות אותו. (I6f747, b/160257628)
- גישה לפריטים במצייני מיקום מפעילה עכשיו בצורה נכונה טעינות של PagingSource עד שמוחזר דף שממלא את האינדקס המבוקש אחרי שהוא עובר טרנספורמציה על ידי PagingData.filter() (I95625, b/158763195)
- תיקון באג שבו לפעמים גלילה אחרי ש-PagingSource מחזיר שגיאה יכולה למנוע מ-PagingDataAdapter.retry() לנסות שוב. (I1084f, b/160194384)
- תוקנה בעיה שבה יכול להיות שפריטים שמתבצעת אליהם גישה אחרי שהדף נטען לא נטענים, למרות שהגישה לפריט הייתה בטווח prefetchDistance (Ie95ae, b/160038730)
- הגדרת PagingConfig.maxSize כבר לא מפעילה placeholderים אחרי אירוע של השמטה (I2be29, b/159667766)
גרסה 3.0.0-alpha02
24 ביוני 2020
androidx.paging:paging-*:3.0.0-alpha02
משוחרר. גרסה 3.0.0-alpha02 מכילה את הקומיטים האלה.
שינויים ב-API
- נוספו עומסים יתרים לבונה של
PagingConfig
עם ערכי ברירת מחדל נפוצים (I39c50, b/158576040) - נוספו עומסים יתרים (overloads) עבור בנאים של
PagingDataAdapter
ושלAsyncPagingDataDiffer
עם ערכי ברירת מחדל נפוצים (Ie91f5) - ממשקי ה-API של המתאם,
dataRefreshFlow
ו-dataRefreshListener
, מעבירים עכשיו ערך בוליאני כדי לציין אםPagingData
ריק (I6e37e, b/159054196) - נוספו ממשקי API של RxJava ו-Guava ל-RemoteMediator – RxRemoteMediator ו-ListenableFutureRemoteMediator
- נוספו פונקציות עזר ל-PagingState לגישה לפריטים נפוצים כמו
isEmpty()
ו-firstItemOrNull()
(I3b5b6, b/158892717)
תיקוני באגים
- הספרייה Pager בודקת עכשיו אם נעשה שימוש חוזר ב-PagingSource במפעל, כדי למנוע שימוש חוזר לא מכוון ב-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
במקרים נדירים של המרה של מיקום במהלך פסילה.
בעיה בהפצה
גרסת ה-Paging
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()
כחלופות ל-RxPagedListBuilder
ב-Kotlin - נוסף
AsyncPagedListDiffer.addPagedListListener()
להאזנה להחלפה של PagedList. b/111698609 - נוספה וריאציה
PagedListAdapter.onCurrentListChanged()
שעוברת את הרשימה הישנה והחדשה, והוצאה משימוש וריאציה קודמת. - נוספו
PagedListAdapter/AsyncPagedListDiffer.submitList()
וריאציות שמקבלות קריאה חוזרת נוספת שמופעלת אם/כאשר רשימת הדפים מוצגת, אחרי ההשוואה. כך אפשר לסנכרן החלפה של PagedList עם עדכונים אחרים בממשק המשתמש. b/73781068 - הוספנו את
PagedList.getLoadedCount()
כדי שתדעו כמה פריטים יש בזיכרון. שימו לב שאם השבתתם את השימוש ב-placeholder, ערך ההחזרה תמיד יהיה.size()
.
תיקוני באגים
- תוקן מצב מירוץ בהשוואה אם נעשה שימוש חוזר ברשימות b/111591017
-
PagedList.loadAround()
מחזירה עכשיו את השגיאהIndexOutOfBoundsException
כשהאינדקס לא תקין. בעבר, האפליקציה הייתה עלולה לקרוס עם חריגה לא ברורה אחרת. - תוקן מקרה שבו גודל טעינה התחלתי קטן מאוד יחד עם נתונים ללא שינוי לא יגרמו לטעינה נוספת b/113122599
גרסה 2.0.0
גרסה 2.0.0
1 באוקטובר 2018
הוספנו תיקון באג אחד ל-Paging 2.0.0
.
תיקוני באגים
- תוקנה קריסה שיכולה להתרחש בגלילה מהירה מאוד באמצעות
PositionalDataSource
ו-placeholder b/114635383.
גרסה 2.0.0-beta01
2 ביולי 2018
תיקוני באגים
- תוקנה בעיה שגרמה להיעלמות תוכן במקרים מסוימים של הוספה בתחילת הרשימה (placeholder מושבת, PositionalDataSource) b/80149146
- (כבר פורסם ב-
1.0.1
) תוקנו קריסות שבהןPagedListAdapter
ו-AsyncPagedListDiffer
לא הצליחו לסמן אירועי העברה. b/110711937
Pre-AndroidX Dependencies
לגרסאות של Paging לפני AndroidX שמופיעות בהמשך, צריך לכלול את יחסי התלות הבאים:
dependencies {
def paging_version = "1.0.0"
implementation "android.arch.paging:runtime:$paging_version"
// alternatively - without Android dependencies for testing
testImplementation "android.arch.paging:common:$paging_version"
// optional - RxJava support
implementation "android.arch.paging:rxjava2:$paging_version"
}
גרסה 1.0.1
גרסה 1.0.1
26 ביוני 2018
הגרסה של התכונה 'חלוקה לדפים' 1.0.1
כוללת תיקון באג אחד ב-runtime
. מומלץ מאוד להשתמש ב-1.0.1
כדי לשמור על יציבות. בנוסף, אנחנו משיקים את Paging RxJava2 1.0.1
, שזהה ל-1.0.0-rc1
.
תיקוני באגים
- תוקנו קריסות שבהן
PagedListAdapter
ו-AsyncPagedListDiffer
לא הצליחו לסמן אירועי העברה. b/110711937
גרסה 1.0.0 של RxJava2
גרסה 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
היו פרטיים.
תיקוני באגים
LivePagedListBuilder
triggers initialPagedList
load on the specified executor, instead of the Arch Components IO thread pool.תוקן אופן הפעולה של invalidate במעטפות פנימיות של
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 - פונקציות מיפוי ל-DataSource ול-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
- הטמעת
DataSource
Room תוקנה כך שתטפל בשאילתות של כמה טבלאות – התיקון הזה כלול ב-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