Lab Lab זה הוא חלק מקורס Android Kotlin Fundamentals. כדי להפיק את המקסימום מהקורס הזה, יש לפעול ברצף לפי קודי שיעור ה-Lab. כל שיעורי Lab של הקורסים מופיעים בדף הנחיתה של Lab Kotlin Fundamentals ל-Android Lab.
מבוא
אחת מהיתרונות העיקריים של RecyclerView
היא לאפשר לך להשתמש במנהלי פריסה כדי לשלוט באסטרטגיית הפריסה ולשנות אותה. LayoutManager
מנהל את הסדר של הפריטים בRecyclerView
.
RecyclerView
כולל מנהלי חבילות מוכנים לשימוש מחוץ לארגון. לדוגמה, אפשר להשתמש ב-LinearLayout
לרשימות אופקיות ואנכיות, או ל-GridLayout
לרשתות. בתרחישים מורכבים יותר, צריך להטמיע LayoutManager
בהתאמה אישית.
בשיעור Lab זה תלמדו איך להציג נתונים באמצעות פריסת רשת במקום רשימה, כך שתיצרו מאפליקציית מעקב השינה. (אם אין לך את האפליקציה מ-Codelab הקודם, אפשר להוריד את הקוד למתחילים ל-Codelab הזה.)
דברים שחשוב לדעת
כדאי שתכירו את:
- בניית ממשק משתמש בסיסי באמצעות
Activity
,Fragments
ו-Views
- ניווט בין מקטעים ושימוש ב-
safeArgs
כדי להעביר נתונים בין מקטעים - הצגה של מודלים, הצגה של מפעלי מודלים וטרנספורמציות
LiveData
והצופים שלו- איך יוצרים מסד נתונים של
Room
, יוצרים DAO ומגדירים ישויות - איך להשתמש בשגרות במשימות מסד נתונים ובמשימות ארוכות אחרות
- איך להטמיע
RecyclerView
בסיסי עם פריסתAdapter
,ViewHolder
ופריסת פריט - איך להטמיע קישור נתונים עבור
RecyclerView
- איך ליצור מתאמים מחייבים ולהשתמש בהם כדי להמיר נתונים
מה תלמדו
- איך להשתמש ב-
LayoutManager
אחר כדי לשנות את אופן הצגת הנתונים בRecyclerView
- איך ליצור פריסת רשת לנתוני השינה
הפעולות שתבצעו:
- בסדרת הסדרה הקודמת בסדרה, תוכלו לפתח את אפליקציית מעקב השינה.
- יש להחליף את רשימת נתוני השינה המוצגים ב-
RecyclerView
באפליקציה ברשת של נתוני שינה.
באפליקציה למעקב אחר שינה יש שני מסכים, המיוצגים על ידי מקטעים, כפי שמתואר באיור למטה.
במסך הראשון, שנמצא מימין, יש לחצנים להפעלה ולהפסקה של המעקב. במסך מוצגים חלק מנתוני השינה של המשתמש. לחצן הניקוי מוחק באופן סופי את כל הנתונים שהאפליקציה אספה עבור המשתמש. המסך השני, שמוצג בצד שמאל, הוא בחירה בדירוג של איכות השינה.
האפליקציה הזו משתמשת בארכיטקטורה פשוטה עם בקר ממשק משתמש, מודל לתצוגה ו-LiveData
ומסד נתונים של Room
כדי לשמור את נתוני השינה.
נתוני השינה מוצגים בRecyclerView
. במעבדה זו, עליכם לשנות את האפליקציה לשימוש ב-GridLayout
. המסך הסופי ייראה כמו צילום המסך שבהמשך.
במעבדת קוד קודמת, כשהוספת את RecyclerView
ל-fragment_sleep_tracker.xml
, הוספת LinearLayoutManager
ללא התאמות אישיות. קוד זה מציג את הנתונים כרשימה אנכית.
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
LinearLayoutManager
הוא מנהל הפריסה הנפוץ והפשוט ביותר של RecyclerView
, והוא תומך במיקום אופקי ואנכי של צפיות של ילדים. לדוגמה, אפשר להשתמש ב-LinearLayoutManager
כדי ליצור קרוסלה של תמונות שהמשתמש גולל לרוחב.
פריסת רשת
עוד תרחיש נפוץ לדוגמה הוא צורך להציג הרבה נתונים למשתמש. ניתן לעשות זאת באמצעות GridLayout
. ה-GridLayoutManager
עבור RecyclerView
מארגן את הנתונים כרשת שניתן לגלול, כפי שאפשר לראות בהמשך.
מנקודת מבט של עיצוב, GridLayout
מתאים במיוחד לרשימות שניתן לייצג כסמלים או תמונות, כמו רשימות באפליקציית עיון בתמונות. באפליקציה של מעקב אחר שינה, אפשר להציג כל לילה של שינה כרשת של סמלים גדולים. העיצוב הזה יספק למשתמש סקירה כללית של איכות השינה שלו בקצרה.
איך GridLayout בפריסה של פריטים
GridLayout
מארגן פריטים ברשת השורות והעמודות. בהנחה שגלילה אנכית, כברירת מחדל, כל פריט בשורה תופסת "span." (במקרה זה, טווח אחד זהה לרוחב של עמודה אחת).
בשתי הדוגמאות הראשונות שבהמשך, כל שורה מורכבת משלושה טווחים. כברירת מחדל, ה-GridLayoutManager
מפרש כל פריט בטווח אחד עד לספירת הטווח. כאשר הוא מגיע לספירה של טווח הזמן, הוא עובר לשורה הבאה.
כברירת מחדל, כל פריט משתרע על פני טווח אחד, אבל אתם יכולים להרחיב כל פריט על ידי ציון משך הזמן שלו. לדוגמה, הפריט העליון במסך השמאלי ביותר (מוצג למטה) תופס שלושה טווחים.
במשימה הזו, מתבצע RecyclerView
של המשימה האחרונה שסיימת בה. לאחר מכן, יש לעדכן אותה כדי להציג נתונים באמצעות GridLayoutManager
. אפשר להמשיך להשתמש באפליקציית מעקב השינה מתוך מעבדת הקוד הקודמת, או להוריד את אפליקציית RecyclerViewGridLayout-Starter מ-GitHub.
שלב 1: שינוי של מנהל הפריסה
- אם צריך, מורידים את האפליקציה RecyclerViewNetworkLayout-Starter מ-GitHub הזה ופותחים את הפרויקט ב-Android Studio.
- פותחים את קובץ הפריסה
fragment_sleep_tracker.xml
. - יש להסיר את מנהל הפריסה מההגדרה
sleep_list
RecyclerView
.
קוד למחיקה:
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager
- פתיחת
SleepTrackerFragment.kt
- ב-
OnCreateView()
, ממש לפני ההצהרהreturn
, צריך ליצורGridLayoutManager
חדש, מלמעלה למטה, עם 3 טווחים.
הבנאיGridLayoutManager
מקבל עד ארבעה ארגומנטים: הקשר, שהואactivity
, המספר שמקיף (עמודות, בפריסת ברירת המחדל האנכית), כיוון (ברירת המחדל היא אנכית) והאם זו פריסה הפוכה (ברירת המחדל היאfalse
).
val manager = GridLayoutManager(activity, 3)
- מתחת לשורה הזו, יש לומר ל-
RecyclerView
להשתמש ב-GridLayoutManager
הזה.RecyclerView
נמצא באובייקט המחייב והוא נקראsleepList
. (ראוfragment_sleep_tracker.xml
.)
binding.sleepList.layoutManager = manager
שלב 2: שינוי הפריסה
הפריסה הנוכחית ב-list_item_sleep_night.xml
מציגה את הנתונים באמצעות שורה שלמה בלילה. בשלב זה, אתם מגדירים פריסה קומפקטית יותר של פריט ריבועי לרשת.
- פתיחת
list_item_sleep_night.xml
- יש למחוק את
sleep_length
TextView
, כי העיצוב החדש לא נחוץ. - צריך להזיז את ה
quality_string
TextView
כך שהוא יוצג מתחת ל-ImageView
. כדי לעשות זאת, עליך לעדכן מספר דברים. זו הפריסה הסופית שלquality_string
TextView
:
<TextView
android:id="@+id/quality_string"
android:layout_width="0dp"
android:layout_height="20dp"
android:textAlignment="center"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="@+id/quality_image"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="@+id/quality_image"
app:layout_constraintTop_toBottomOf="@+id/quality_image"
tools:text="Excellent!!!"
app:sleepQualityString="@{sleep}" />
- יש לאמת בתצוגה המפורטת עיצוב שה-
quality_string
TextView
ממוקם מתחת ל-ImageView
.
מאחר שהשתמשת בקישור נתונים, אין צורך לשנות דבר בAdapter
. הקוד אמור לפעול כרגיל והרשימה אמורה להופיע כרשת.
- מריצים את האפליקציה ובודקים איך נתוני השינה מוצגים ברשת.
חשוב לזכור שהגודלConstraintLayout
עדיין מופיע בכל הרוחב. ה-GridLayoutManager
נותן לתצוגה רוחב קבוע, על סמך הטווח שלו.GridLayoutManager
עושה כמיטב יכולתה כדי לעמוד בכל המגבלות האלה בעת פריסת הרשת, הוספת רווח לבן או חיתוך פריטים.
- ב-
SleepTrackerFragment
, בקוד שיוצר אתGridLayoutManager
, צריך לשנות את מספר הטווחים שלGridLayoutManger
ל-1. מפעילים את האפליקציה ומקבלים רשימה.
val manager = GridLayoutManager(activity, 1)
- אפשר לשנות את מספר הטווחים של
GridLayoutManager
ל-10 ולהפעיל את האפליקציה. חשוב לשים לב:GridLayoutManager
יכול להתאים ל-10 פריטים ברצף, אבל עכשיו הפריטים נחתכים. - משנים את מספר הטווח ל-5 ואת הכיוון ל-
GridLayoutManager.VERTICAL
. מפעילים את האפליקציה ושימו לב לאופן שבו אפשר לגלול לרוחב. תצטרכו פריסה שונה כדי להיראות טוב.
val manager = GridLayoutManager(activity, 5, GridLayoutManager.HORIZONTAL, false)
- חשוב לזכור להגדיר שוב את ספירת הטווח ל-3 ולהפך
פרויקט ב-Android Studio: RecyclerViewNetworkLayout
- מנהלי הפריסה מנהלים את האופן שבו הפריטים ב
RecyclerView
מסודרים. - המדיניות
RecyclerView
כוללת מנהלי פריסה מחוץ לתיבה עבור תרחישי שימוש נפוצים, כמוLinearLayout
לרשימות אופקיות ואנכיות, ו-GridLayout
עבור רשתות. - לתרחישים מורכבים יותר, מומלץ להטמיע
LayoutManager
בהתאמה אישית. - מבחינת עיצוב,
GridLayout
מתאים במיוחד לרשימות של פריטים שניתן לייצג כסמלים או כתמונות. GridLayout
מארגן פריטים ברשת השורות והעמודות. בהנחה שגלילה אנכית, כל פריט בשורה תופס את מה ש&"39.- אתם יכולים להתאים אישית את מספר הצפיות בפריטים. כך תוכלו ליצור רשתות מעניינות יותר בלי להשתמש בכלי לניהול פריסה בהתאמה אישית.
- יוצרים פריסת פריט עבור פריט אחד ברשת, ומנהל הפריסה מטפל בסידור הפריטים.
- אפשר להגדיר את
LayoutManager
ל-RecyclerView
בקובץ פריסת ה-XML שמכיל את הרכיב<RecyclerView>
, או באופן פרוגרמטי.
קורסים בעירום:
התיעוד של מפתח Android:
בקטע הזה מפורטות מטלות שיעורי בית אפשריות לתלמידים שעובדים עם קוד Lab הזה, במסגרת קורס בהדרכת מורה. למורה יש אפשרות לבצע את הפעולות הבאות:
- אם צריך, מקצים שיעורי בית.
- ספרו לתלמידים איך מגישים מטלות בשיעורי בית.
- לתת ציונים למטלות שיעורי הבית.
המורים יכולים להשתמש בהצעות האלה כמה שפחות, ומומלץ להקצות להן כל שיעורי בית שדעתם מתאימה להם.
אם אתם עובדים בעצמכם על שיעור הקוד הזה, אתם מוזמנים להשתמש במטלות שיעורי הבית האלה כדי לבחון את הידע שלכם.
מענה על השאלות האלה
שאלה 1
אילו מהפורמטים הבאים מנוהלים על ידי Android? יש לבחור בכל האפשרויות הרלוונטיות.
▬ LinearLayouManager
▬ GridLayoutManager
▬ CircularLayoutManager
▬ StaggeredGridLayoutManager
שאלה 2
מהו "span"
הוספה בגודל של רשת שנוצרת על ידי GridLayoutManager
.
הוספה של רוחב עמודה ברשת.
הוספה של מידות הפריט ברשת.
▸ מספר העמודות ברשת עם כיוון אנכי.
מתחילים בשיעור הבא: