Lab Lab זה הוא חלק מקורס Android Kotlin Fundamentals. כדי להפיק את המקסימום מהקורס הזה, יש לפעול ברצף לפי קודי שיעור ה-Lab. כל שיעורי Lab של הקורסים מופיעים בדף הנחיתה של Lab Kotlin Fundamentals ל-Android Lab.
מבוא
בשיעורי ה-Labs הקודמים בשיעור הזה, שיפרנו את הקוד לאפליקציה GuessTheWord. האפליקציה משתמשת עכשיו באובייקטים ViewModel
, כך שנתוני האפליקציה שמרו על שינויים בתצורת המכשיר כמו סיבובי מסך ושינויים בזמינות המקלדת. הוספת גם LiveData
שניתן לתעד, כך שהצפיות יקבלו הודעה באופן אוטומטי במקרה של שינויים בנתונים.
במעבדה זו, אתם ממשיכים לעבוד עם אפליקציית GuessTheWord. אתם מקשרים את הכיתות ל-ViewModel
באפליקציה כדי שהתצוגות בפריסה שלכם יתקשרו ישירות עם האובייקטים ViewModel
. (עד עכשיו, האפליקציות שלך ניהלו תקשורת עקיפה עם ViewModel
, באמצעות קטעי האפליקציה.) לאחר שילוב של קישור נתונים עם אובייקטים מסוג ViewModel
, אין יותר צורך בגורמים המטפלים בקליקים במקטעים של האפליקציה. לכן, יש להסיר אותם.
בנוסף, עליך לשנות את האפליקציה GuessTheWord כדי להשתמש ב-LiveData
כמקור לקישור נתונים כדי ליידע את ממשק המשתמש לגבי שינויים בנתונים, בלי להשתמש בשיטות תצפית של LiveData
.
דברים שחשוב לדעת
- איך ליצור אפליקציות בסיסיות ל-Android ב-Kotlin.
- איך פועלים מחזורי חיים ומקטעים חלקיים.
- איך להשתמש באובייקטים
ViewModel
באפליקציה. - איך לאחסן נתונים באמצעות
LiveData
בViewModel
. - איך להוסיף שיטות תצפית שיתייחסו לשינויים בנתונים של
LiveData
.
מה תלמדו
- איך משתמשים ברכיבים של ספריית קישור הנתונים.
- איך לשלב את
ViewModel
עם קישור נתונים. - איך לשלב את
LiveData
עם קישור נתונים. - כיצד להשתמש בקישורי האזנה כדי להחליף את רכיב ההאזנה של הקליקים בשבר.
- איך מוסיפים עיצוב מחרוזת לביטויים שמחייבים נתונים?
הפעולות שתבצעו:
- התצוגות בפריסות GuessTheWord מתקשרות באופן עקיף עם אובייקטים של
ViewModel
, באמצעות בקרי ממשק משתמש (מקטעים) כדי להעביר מידע. במעבדת קוד זו, אתם מקשרים את התצוגות המפורטות של האפליקציה לאובייקטים שלViewModel
, כך שהצפיות יתקשרו ישירות עם האובייקטיםViewModel
. - צריך לשנות את האפליקציה כך שייעשה שימוש ב-
LiveData
כמקור שמחייב את הנתונים. לאחר השינוי, האובייקטים ב-LiveData
יקבלו הודעה על כך בממשק המשתמש לגבי שינויים בנתונים, ואין יותר צורך בשיטות הצופהLiveData
.
במעבדות הקוד של שיעור 5, אתם מפתחים את האפליקציה GuessTheWord, שמתחילה בקוד למתחילים. GuessTheWord הוא משחק בסגנון שחקנים ששני שחקנים. השחקן משתף פעולה כדי להשיג את הניקוד הגבוה ביותר האפשרי.
השחקן הראשון בוחן את המילים באפליקציה ומתאים כל אחת מהן לשחקן אחר, ומבטיח שלא להציג את המילה לשחקן השני. השחקן השני מנסה לנחש את המילה.
כדי לשחק במשחק, השחקן הראשון פותח את האפליקציה במכשיר וצופה במילה, למשל "רצועה&לגיטרה; כפי שמוצג בצילום המסך שבהמשך.
השחקן הראשון מנגן את המילה, והיזהר לא לומר את המילה עצמה.
- כאשר השחקן השני מנחש את המילה כראוי, השחקן הראשון לוחץ על הלחצן הבנתי, שמגדיל את הספירה בכל פעם ומציג את המילה הבאה.
- אם הנגן השני לא יכול לנחש את המילה, הנגן הראשון לוחץ על הלחצן דילוג. פעולה זו מפחיתה את מספר הקולות ומדלגת למילה הבאה.
- כדי לסיים את המשחק, לוחצים על הלחצן סיום המשחק. (הפונקציונליות הזו לא נמצאת בקוד הפתיחה של מעבדת הקוד הראשונה בסדרה.)
במעבדה הזו, אתם משפרים את אפליקציית GuessTheWord על ידי שילוב של קישור נתונים עם LiveData
באובייקטים ViewModel
. הפעולה הזו מאפשרת אוטומציה של התקשורת בין התצוגות בפריסה ובאובייקטים של ViewModel
, והיא מאפשרת לפשט את הקוד באמצעות LiveData
.
מסך – כותרת | מסך המשחק | מסך הניקוד |
במשימה הזו תאתרו את קוד הסימן להפעלה והרצה של שיעור ה-Lab הזה. אפשר להשתמש באפליקציית GuessTheWord שיצרתם ב-Codelab הקודם כקוד למתחילים, או להוריד אפליקציה למתחילים.
- (אופציונלי) אם אינכם משתמשים בקוד מ-codelab הקודם, הורידו את הקוד למתחילים ל-codelab זה. מבטלים את דחיסת הקוד ופותחים את הפרויקט ב-Android Studio.
- מפעילים את האפליקציה ומשחקים במשחק.
- שימו לב שהלחצן הבנתי מציג את המילה הבאה ומגדיל את הציון במילה אחת, ואילו הלחצן דילוג מציג את המילה הבאה ומוריד את התוצאה במילה אחת. הלחצן סיום המשחק מסתיים.
- עוברים בין כל המילים ושימו לב שהאפליקציה מנווטת באופן אוטומטי למסך הניקוד.
במעבדת קוד קודמת, השתמשתם בשיוך נתונים כדרך בטוחה לגישה לתצוגות המפורטות באפליקציה GuessTheWord. עם זאת, העוצמה האמיתית של קישור הנתונים היא באמצעות מה שהשם מציע: נתונים שמפנים ישירות ישירות לאובייקטים באפליקציה שלכם.
ארכיטקטורת אפליקציה נוכחית
באפליקציה שלך, התצוגות מוגדרות בפריסת XML, והנתונים עבור התצוגות האלה נשמרים באובייקטים של ViewModel
. בין כל תצוגה מפורטת לבין ViewModel
שלה יש בקר שליטה בממשק המשתמש, המשמש כממסר ביניהם.
למשל:
- הלחצן הבנתי מוגדר כתצוגת
Button
בקובץ הפריסהgame_fragment.xml
. - כשהמשתמש מקיש על הלחצן הבנתי, event listener בקטע
GameFragment
GameFragment
מתקשר ל-click listener המתאים ב-GameViewModel
. - הניקוד מתעדכן ב-
GameViewModel
.
התצוגה Button
וה-GameViewModel
לא יוצרים קשר ישיר – הם צריכים את event listener בGameFragment
.
מודל תצוגה שהועבר לקישור הנתונים
פשוט יותר אם הצפיות בפריסה יתקשרו ישירות עם הנתונים באובייקטים של ViewModel
, בלי להסתמך על הבקרים של ממשק המשתמש כמתווך.
אובייקטים של ViewModel
מכילים את כל נתוני ממשק המשתמש באפליקציה GuessTheWord. על ידי העברת אובייקטים של ViewModel
אל קישור הנתונים, ניתן להפוך חלק מהתקשורת בין התצוגות לבין האובייקטים ViewModel
באופן אוטומטי.
במשימה הזו, משייכים את הכיתות GameViewModel
ו-ScoreViewModel
לפריסות ה-XML התואמות שלהן. כמו כן, אתם מגדירים קישורים למאזינים כדי לטפל באירועי קליקים.
שלב 1: הוספת קישור נתונים ל-GameViewModel
בשלב זה, משייכים את GameViewModel
לקובץ הפריסה המתאים, game_fragment.xml
.
- בקובץ
game_fragment.xml
, מוסיפים משתנה של קישור נתונים מסוגGameViewModel
. אם יש שגיאות ב-Android Studio, מנקים את הפרויקט ובונים אותו מחדש.
<layout ...>
<data>
<variable
name="gameViewModel"
type="com.example.android.guesstheword.screens.game.GameViewModel" />
</data>
<androidx.constraintlayout...
- בקובץ
GameFragment
, צריך להעביר אתGameViewModel
לאיגוד הנתונים.
לשם כך, יש להקצות אתviewModel
למשתנהbinding.gameViewModel
, שעליו הצהרת בשלב הקודם. צריך להזין את הקוד בתוךonCreateView()
, אחרי האתחול של הסימןviewModel
. אם יש שגיאות ב-Android Studio, מנקים את הפרויקט ובונים אותו מחדש.
// Set the viewmodel for databinding - this allows the bound layout access
// to all the data in the ViewModel
binding.gameViewModel = viewModel
שלב 2: שימוש בקישורי האזנה לטיפול באירועים
קישורי האזנה הם ביטויים מחייבים שפועלים כאשר אירועים כמו onClick()
, onZoomIn()
או onZoomOut()
מופעלים. קישורי האזנה נכתבים כביטויים של למדה.
קישור הנתונים יוצר event listener ומגדיר את ה-lister בתצוגה. כאשר האירוע שהאזנת לו קורה, המאזינים בוחנים את הביטוי של למדה. קישורי האזנה פועלים עם הפלאגין של Android Gradle מגרסה 2.0 ואילך. למידע נוסף, ניתן לקרוא את המאמר פריסות וביטויים מחייבים.
בשלב זה, מחליפים את המאזינים של הקליקים ב-GameFragment
בקישורי ההאזנה בקובץ game_fragment.xml
.
- ב-
game_fragment.xml
, יש להוסיף את המאפייןonClick
ל-skip_button
. יש להגדיר ביטוי מחייב ולהתקשר לשיטהonSkip()
ב-GameViewModel
. ביטוי הקישור הזה נקרא קישור מאזינים.
<Button
android:id="@+id/skip_button"
...
android:onClick="@{() -> gameViewModel.onSkip()}"
... />
- באופן דומה, מקשרים את אירוע הקליק של
correct_button
לשיטהonCorrect
()
בGameViewModel
.
<Button
android:id="@+id/correct_button"
...
android:onClick="@{() -> gameViewModel.onCorrect()}"
... />
- מקשרים את אירוע הקליק אל
end_game_button
לשיטהonGameFinish
()
בGameViewModel
.
<Button
android:id="@+id/end_game_button"
...
android:onClick="@{() -> gameViewModel.onGameFinish()}"
... />
- ב-
GameFragment
, מסירים את ההצהרות שמגדירות את המאזינים של הקליקים, ומסירים את הפונקציות שאליהן המאזינים לוחצים. אין לך יותר צורך בהם.
קוד להסרה:
binding.correctButton.setOnClickListener { onCorrect() }
binding.skipButton.setOnClickListener { onSkip() }
binding.endGameButton.setOnClickListener { onEndGame() }
/** Methods for buttons presses **/
private fun onSkip() {
viewModel.onSkip()
}
private fun onCorrect() {
viewModel.onCorrect()
}
private fun onEndGame() {
gameFinished()
}
שלב 3: מוסיפים קישור נתונים ל-ScoreViewModel
בשלב זה, משייכים את ScoreViewModel
לקובץ הפריסה המתאים, score_fragment.xml
.
- בקובץ
score_fragment.xml
, מוסיפים משתנה מחייב מסוגScoreViewModel
. שלב זה דומה למה שעשית עבורGameViewModel
למעלה.
<layout ...>
<data>
<variable
name="scoreViewModel"
type="com.example.android.guesstheword.screens.score.ScoreViewModel" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
- ב-
score_fragment.xml
, יש להוסיף את המאפייןonClick
ל-play_again_button
. מגדירים קישור האזנה ומתקשרים לשיטהonPlayAgain()
בScoreViewModel
.
<Button
android:id="@+id/play_again_button"
...
android:onClick="@{() -> scoreViewModel.onPlayAgain()}"
... />
- ב-
ScoreFragment
, בתוךonCreateView()
, מפעילים את ה-viewModel
. לאחר מכן מפעילים אתbinding.scoreViewModel
המשתנה המחייב.
viewModel = ...
binding.scoreViewModel = viewModel
- ב-
ScoreFragment
, יש להסיר את הקוד שמגדיר את ה-click listener שלplayAgainButton
. אם ב-Android Studio מוצגת שגיאה, מנקים את הפרויקט ובונים אותו מחדש.
קוד להסרה:
binding.playAgainButton.setOnClickListener { viewModel.onPlayAgain() }
- עליך להפעיל את האפליקציה שלך. האפליקציה אמורה לפעול כרגיל, אבל עכשיו הלחצנים מוצגים ישירות עם האובייקטים
ViewModel
. התצוגות לא כוללות יותר תקשורת באמצעות הלחצן של לחיצה על לחצנים ב-ScoreFragment
.
פתרון בעיות הקשורות להודעות שגיאה שקשורות לנתונים
כשאפליקציה משתמשת בקישור נתונים, תהליך האיסוף יוצר מחלקת ביניים המשמשת לקישור הנתונים. ייתכן ששגיאות באפליקציה לא יזוהו ב-Android Studio עד הידור האפליקציה, לכן לא יוצגו לך אזהרות או קוד אדום בזמן הכתיבה. אבל בזמן ההדר, אתם מקבלים שגיאות קריטיות שנובעות מכיתות הביניים שנוצרו.
אם מופיעה הודעת שגיאה קריטית:
- מעיינים בהודעה בקפידה בחלונית Build ב-Android Studio. אם מיקום מסוים מסתיים בעוד
databinding
, יש שגיאה בקישור הנתונים. - בקובץ ה-XML לפריסה, בודקים אם יש שגיאות במאפייני
onClick
שנעשה בהם שימוש בקישור נתונים. מחפשים את הפונקציה שביטוי ה-lamba מתקשר אליה ומוודאים שהיא קיימת. - בקטע
<data>
של ה-XML, בודקים את האיות של המשתנה של קישור הנתונים.
לדוגמה, חשוב לשים לב לאיות שגוי של שם הפונקציה onCorrect()
בערך המאפיין הבא:
android:onClick="@{() -> gameViewModel.onCorrectx()}"
שים לב גם לשגיאת האיות של gameViewModel
בקטע <data>
של קובץ ה-XML:
<data>
<variable
name="gameViewModelx"
type="com.example.android.guesstheword.screens.game.GameViewModel" />
</data>
Android Studio לא מזהה שגיאות כאלה עד הידור האפליקציה, ולאחר מכן המהדר מציג הודעת שגיאה כמו:
error: cannot find symbol import com.example.android.guesstheword.databinding.GameFragmentBindingImpl" symbol: class GameFragmentBindingImpl location: package com.example.android.guesstheword.databinding
קישור הנתונים פועל היטב עם LiveData
שמשמש לאובייקטים של ViewModel
. סיימת להוסיף את קישור הנתונים לאובייקטים של ViewModel
, ועכשיו אתה יכול לשלב את LiveData
.
במשימה הזו עליך לשנות את האפליקציה GuessTheWord כדי להשתמש ב-LiveData
כמקור לקישור נתונים כדי ליידע את ממשק המשתמש לגבי שינויים בנתונים, בלי להשתמש בשיטות הצופה LiveData
.
שלב 1: הוספת המילה LiveData לקובץ Game_snippet.xml
בשלב זה, אתם מקשרים את תצוגת הטקסט הנוכחית של המילים ישירות לאובייקט LiveData
בViewModel
.
- ב-
game_fragment.xml
, יש להוסיף את המאפייןandroid:text
לתצוגת הטקסטword_text
.
יש להגדיר אותו לאובייקט LiveData
, word
מתוך GameViewModel
, באמצעות המשתנה המחייב, gameViewModel
.
<TextView
android:id="@+id/word_text"
...
android:text="@{gameViewModel.word}"
... />
לתשומת ליבך, אין צורך להשתמש ב-word.value
. במקום זאת, אפשר להשתמש באובייקט LiveData
בפועל. האובייקט LiveData
מציג את הערך הנוכחי של word
. אם הערך של word
הוא null, האובייקט LiveData
יציג מחרוזת ריקה.
- ב-
GameFragment
, אחריonCreateView()
, אחרי האתחול של ה-gameViewModel
, מגדירים את הפעילות הנוכחית כבעלים של מחזור החיים של המשתנהbinding
. פעולה זו מגדירה את היקף האובייקט שלLiveData
שלמעלה, ומאפשרת לאובייקט לעדכן באופן אוטומטי את התצוגות בפריסהgame_fragment.xml
.
binding.gameViewModel = ...
// Specify the current activity as the lifecycle owner of the binding.
// This is used so that the binding can observe LiveData updates
binding.lifecycleOwner = this
- ב-
GameFragment
, יש להסיר את הצופה מהLiveData
שלword
.
קוד להסרה:
/** Setting up LiveData observation relationship **/
viewModel.word.observe(this, Observer { newWord ->
binding.wordText.text = newWord
})
- מפעילים את האפליקציה ומשחקים במשחק. עכשיו המילה הנוכחית מתעדכנת ללא שיטת תצפית בבקר ממשק המשתמש.
שלב 2: מוסיפים את LiveLive ניקוד לקובץ Score_snippet.xml
בשלב זה, מתבצע איגוד של LiveData
score
לתצוגת טקסט הציון בקטע הקוד של הציון.
- ב-
score_fragment.xml
, אפשר להוסיף את המאפייןandroid:text
לתצוגת הטקסט של הניקוד. מקצים אתscoreViewModel.score
למאפייןtext
. מאחר שה-score
הוא מספר שלם, יש להמיר אותו למחרוזת באמצעותString.valueOf()
.
<TextView
android:id="@+id/score_text"
...
android:text="@{String.valueOf(scoreViewModel.score)}"
... />
- ב-
ScoreFragment
, אחרי האתחול של המאפייןscoreViewModel
, מגדירים את הפעילות הנוכחית כבעלים של מחזור החיים של המשתנהbinding
.
binding.scoreViewModel = ...
// Specify the current activity as the lifecycle owner of the binding.
// This is used so that the binding can observe LiveData updates
binding.lifecycleOwner = this
- ב-
ScoreFragment
, יש להסיר את הצופה מהאובייקטscore
.
קוד להסרה:
// Add observer for score
viewModel.score.observe(this, Observer { newScore ->
binding.scoreText.text = newScore.toString()
})
- מפעילים את האפליקציה ומשחקים במשחק. שימו לב שהציון בקטע המידע מוצג כראוי, ללא צופה בקטע הקוד של הציון.
שלב 3: הוספת פורמט של מחרוזת עם איגוד נתונים
בפריסה, אפשר להוסיף עיצוב מחרוזת יחד עם קישור נתונים. במשימה הזו, הפורמט של המילה הנוכחית הוא להוסיף מירכאות לפניה. בנוסף, הפורמט של מחרוזת הציון הוא תחילית לציון הנוכחי כפי שמוצג בתמונה הבאה.
- ב
string.xml
, יש להוסיף את המחרוזות הבאות שישמשו לפורמט של תצוגות הטקסטword
ו-score
.%s
וה-%d
הם ה-placeholders של המילה הנוכחית ושל הציון הנוכחי.
<string name="quote_format">\"%s\"</string>
<string name="score_format">Current Score: %d</string>
- ב-
game_fragment.xml
, יש לעדכן את המאפייןtext
של תצוגת הטקסטword_text
כדי להשתמש במשאב המחרוזתquote_format
. הצלחה בgameViewModel.word
. פעולה זו מעבירה את המילה הנוכחית כארגומנט במחרוזת העיצוב.
<TextView
android:id="@+id/word_text"
...
android:text="@{@string/quote_format(gameViewModel.word)}"
... />
- עיצוב תצוגת הטקסט
score
באופן דומה ל-word_text
. ב-game_fragment.xml
, יש להוסיף את המאפייןtext
לתצוגת הטקסטscore_text
. יש להשתמש במשאב המחרוזתscore_format
, שמקבל ארגומנט מספרי אחד, שמיוצג על ידי ה-placeholder%d
. יש להעביר את האובייקטLiveData
,score
, כארגומנט למחרוזת העיצוב הזו.
<TextView
android:id="@+id/score_text"
...
android:text="@{@string/score_format(gameViewModel.score)}"
... />
- בקטגוריה
GameFragment
, בתוך השיטהonCreateView()
, צריך להסיר את קוד התצפית שלscore
.
קוד להסרה:
viewModel.score.observe(this, Observer { newScore ->
binding.scoreText.text = newScore.toString()
})
- לנקות את האפליקציה, לבנות אותה מחדש ולהפעיל אותה ואז לשחק במשחק. שימו לב שהמילה והציון הנוכחיים מעוצבים במסך המשחק.
מעולה! שילבת את LiveData
ואת ViewModel
באפליקציה כדי לשייך נתונים. התצוגות המפורטות בפריסה הזו יכולות לתקשר עם ViewModel
באופן ישיר, בלי להשתמש ברכיבי handler של קליקים בקטע הקוד. בנוסף, השתמשת באובייקטים של LiveData
כמקור לקישור הנתונים כדי ליידע את ממשק המשתמש באופן אוטומטי לגבי שינויים בנתונים, ללא שיטות התצפית של LiveData
.
פרויקט של Android Studio: GuessTheWord
- ספריית קישור הנתונים פועלת בצורה חלקה עם רכיבי ארכיטקטורה של Android כמו
ViewModel
וLiveData
. - הפריסות באפליקציה שלכם יכולות לקשר את הנתונים ברכיבי הארכיטקטורה, שכבר עוזרים לכם לנהל את מחזור החיים של בקר ממשק המשתמש ולהודיע על שינויים בנתונים.
הצגה של נתוני מודל מודל
- ניתן לשייך
ViewModel
לפריסה באמצעות התאמת נתונים. - אובייקטים מסוג
ViewModel
מכילים את נתוני ממשק המשתמש. העברתViewModel
אובייקטים לקישור הנתונים מאפשרת לבצע אוטומציה של חלק מהתקשורת בין התצוגות לבין האובייקטיםViewModel
.
איך משייכים ViewModel
לפריסה:
- בקובץ הפריסה, מוסיפים משתנה של קישור נתונים מסוג
ViewModel
.
<data>
<variable
name="gameViewModel"
type="com.example.android.guesstheword.screens.game.GameViewModel" />
</data>
- בקובץ
GameFragment
, יש להעביר אתGameViewModel
לאיגוד הנתונים.
binding.gameViewModel = viewModel
קישורי האזנה
- קישורי האזנה הם ביטויים מחייבים שפועלים כאשר אירועי קליק כמו
onClick()
מופעלים. - קישורי האזנה נכתבים כביטויים של למדה.
- שימוש בפונקציות event listener מחליף את פונקציות ה-click listener בשלט של ממשק המשתמש בפקדי ההאזנה בקובץ הפריסה.
- קישור הנתונים יוצר event listener ומגדיר את ה-lister בתצוגה.
android:onClick="@{() -> gameViewModel.onSkip()}"
הוספה של LiveData לקישור נתונים
- אובייקטים של
LiveData
יכולים לשמש כמקור לקישור נתונים כדי ליידע את ממשק המשתמש באופן אוטומטי לגבי שינויים בנתונים. - אתם יכולים לקשר את התצוגה ישירות לאובייקט
LiveData
ב-ViewModel
. כאשרLiveData
ב-ViewModel
משתנה, ניתן לעדכן את התצוגות בפריסה באופן אוטומטי, ללא שיטות הבקר בבקרי ממשק המשתמש.
android:text="@{gameViewModel.word}"
- כדי שמשתנה הנתונים (
LiveData
) יפעל, יש להגדיר את הפעילות הנוכחית (בקר ממשק המשתמש) כבעלים של מחזור החיים של המשתנהbinding
בבקר ממשק המשתמש.
binding.lifecycleOwner = this
פורמט מחרוזת עם איגוד נתונים
- באמצעות קישור נתונים, אפשר לעצב משאב מחרוזת באמצעות placeholders כמו
%s
למחרוזות ו-%d
למספרים שלמים. - כדי לעדכן את המאפיין
text
של התצוגה המפורטת, יש להעביר את האובייקטLiveData
בתור ארגומנט למחרוזת הפורמט.
android:text="@{@string/quote_format(gameViewModel.word)}"
קורס אוניברסיטה:
התיעוד של מפתח Android:
בקטע הזה מפורטות מטלות שיעורי בית אפשריות לתלמידים שעובדים עם קוד Lab הזה, במסגרת קורס בהדרכת מורה. למורה יש אפשרות לבצע את הפעולות הבאות:
- אם צריך, מקצים שיעורי בית.
- ספרו לתלמידים איך מגישים מטלות בשיעורי בית.
- לתת ציונים למטלות שיעורי הבית.
המורים יכולים להשתמש בהצעות האלה כמה שפחות, ומומלץ להקצות להן כל שיעורי בית שדעתם מתאימה להם.
אם אתם עובדים בעצמכם על שיעור הקוד הזה, אתם מוזמנים להשתמש במטלות שיעורי הבית האלה כדי לבחון את הידע שלכם.
מענה על השאלות האלה
שאלה 1
אילו מבין המשפטים הבאים לא נכונים לגבי קישורי האזנה?
- קישורי האזנה הם ביטויים מחייבים שפועלים כאשר אירוע מתרחש.
- קישורי האזנה פועלים עם כל הגרסאות של הפלאגין Android Gradle.
- קישורי האזנה נכתבים כביטויים של למדה.
- קישורי האזנה דומים לאלה של הפניות לשיטה, אבל הם מאפשרים לכם להפעיל ביטויים שרירותיים לקישור נתונים.
שאלה 2
נניח שהאפליקציה כוללת את משאב המחרוזת הבא:<string name="generic_name">Hello %s</string>
איזה מהביטויים הבאים הוא התחביר הנכון לעיצוב המחרוזת, באמצעות הביטוי שמקשר את הנתונים?
android:text= "@{@string/generic_name(user.name)}"
android:text= "@{string/generic_name(user.name)}"
android:text= "@{@generic_name(user.name)}"
android:text= "@{@string/generic_name,user.name}"
שאלה 3
מתי מתבצעת הערכה של ביטוי שמקשר בין פונקציות ההאזנה?
- כאשר הנתונים המאוחסנים ב-
LiveData
משתנים - כאשר פעילות נוצרת מחדש על ידי שינוי של הגדרה
- כאשר אירוע כמו
onClick()
קורה - כשהפעילות עוברת לרקע
לשיעור הבא:
קישורים למעבדות אחרות של הקוד בקורס הזה זמינים בדף הנחיתה של Android Kotlin Fundamentals Codelabs.