این کد لبه بخشی از دوره آموزشی Android Kotlin Fundamentals است. اگر به ترتیب روی کدها کار کنید، بیشترین ارزش را از این دوره خواهید گرفت. همه کد لبه های دوره در صفحه فرود کد لبه های Android Kotlin Fundamentals فهرست شده اند.
مقدمه
در کدهای قبلی در این درس، کد برنامه GuessTheWord را بهبود دادید. این برنامه اکنون از اشیاء ViewModel استفاده می کند، بنابراین داده های برنامه از تغییرات پیکربندی دستگاه مانند چرخش صفحه و تغییرات در دسترس بودن صفحه کلید زنده می مانند. شما همچنین LiveData قابل مشاهده را اضافه کرده اید، بنابراین نماها به طور خودکار با تغییر داده های مشاهده شده مطلع می شوند.
در این کد لبه، شما به کار با برنامه GuessTheWord ادامه می دهید. شما نماها را به کلاس های ViewModel در برنامه متصل می کنید تا نماهای موجود در طرح شما مستقیماً با اشیاء ViewModel ارتباط برقرار کنند. (تاکنون در برنامه شما، نماها به صورت غیرمستقیم از طریق قطعات برنامه با ViewModel ارتباط برقرار می کردند.) پس از اینکه پیوند داده را با اشیاء ViewModel ادغام کردید، دیگر نیازی به کنترل کننده کلیک در قطعات برنامه ندارید، بنابراین آنها را حذف می کنید.
همچنین میتوانید برنامه GuessTheWord را تغییر دهید تا از LiveData بهعنوان منبع اتصال دادهها برای اطلاع دادن به UI در مورد تغییرات دادهها، بدون استفاده از روشهای ناظر LiveData استفاده کند.
آنچه از قبل باید بدانید
- نحوه ایجاد برنامه های اساسی اندروید در Kotlin.
- چرخههای عمر فعالیت و قطعه چگونه کار میکنند.
- نحوه استفاده از اشیاء
ViewModelدر برنامه - نحوه ذخیره داده ها با استفاده از
LiveDataدرViewModel. - نحوه اضافه کردن متدهای مشاهده گر برای مشاهده تغییرات در داده های
LiveData.
چیزی که یاد خواهید گرفت
- نحوه استفاده از عناصر کتابخانه Data Binding .
- نحوه ادغام
ViewModelبا data binding. - نحوه ادغام
LiveDataبا اتصال داده - نحوه استفاده از اتصالات شنونده برای جایگزینی شنوندگان کلیک در یک قطعه.
- نحوه اضافه کردن قالب بندی رشته به عبارات اتصال داده
کاری که خواهی کرد
- نماها در طرحبندیهای GuessTheWord بهطور غیرمستقیم با اشیاء
ViewModelارتباط برقرار میکنند و از کنترلکنندههای UI (قطعات) برای انتقال اطلاعات استفاده میکنند. در این لبه کد، نماهای برنامه را به اشیاءViewModelمتصل می کنید تا نماها مستقیماً با اشیاءViewModelارتباط برقرار کنند. - شما برنامه را تغییر می دهید تا از
LiveDataبه عنوان منبع اتصال داده استفاده کند. پس از این تغییر، اشیاءLiveDataبه UI در مورد تغییرات داده ها اطلاع می دهند و روش های مشاهده گرLiveDataدیگر مورد نیاز نیست.
در بخش کدهای درس 5، برنامه GuessTheWord را توسعه می دهید که با کد شروع شروع می شود. GuessTheWord یک بازی دو نفره به سبک charades است که در آن بازیکنان برای دستیابی به بالاترین امتیاز ممکن با یکدیگر همکاری می کنند.
بازیکن اول به کلمات موجود در برنامه نگاه می کند و هر کدام را به نوبه خود عمل می کند و مطمئن می شود که کلمه را به بازیکن دوم نشان نمی دهد. بازیکن دوم سعی می کند کلمه را حدس بزند.
برای انجام بازی، اولین بازیکن برنامه را روی دستگاه باز می کند و کلمه ای را می بیند، به عنوان مثال "گیتار"، همانطور که در تصویر زیر نشان داده شده است.
اولین بازیکن کلمه را اجرا می کند و مراقب است که در واقع خود کلمه را نگوید.
- وقتی بازیکن دوم کلمه را به درستی حدس زد، بازیکن اول دکمه Got It را فشار می دهد که تعداد را یک عدد افزایش می دهد و کلمه بعدی را نشان می دهد.
- اگر بازیکن دوم نتواند کلمه را حدس بزند، بازیکن اول دکمه Skip را فشار می دهد که تعداد را یک کاهش می دهد و به کلمه بعدی می رود.
- برای پایان بازی، دکمه پایان بازی را فشار دهید. (این قابلیت در کد شروع برای اولین آزمایشگاه کد در این سری نیست.)
در این لبه کد، برنامه GuessTheWord را با ادغام پیوند داده با LiveData در اشیاء ViewModel بهبود میبخشید. این ارتباط بین نماهای موجود در طرح و اشیاء ViewModel را خودکار می کند و به شما امکان می دهد کد خود را با استفاده از LiveData ساده کنید.
صفحه عنوان |
صفحه نمایش بازی |
صفحه نمایش امتیاز |
در این کار، کد شروع خود را برای این کد لبه پیدا کرده و اجرا می کنید. میتوانید از برنامه GuessTheWord که در Codelab قبلی ساختهاید بهعنوان کد شروع استفاده کنید، یا میتوانید یک برنامه شروع را دانلود کنید.
- (اختیاری) اگر از کد خود از کد آزمایشگاه قبلی استفاده نمی کنید، کد شروع را برای این کد لبه دانلود کنید . کد را از حالت فشرده خارج کرده و پروژه را در Android Studio باز کنید.
- برنامه را اجرا کنید و بازی را انجام دهید.
- توجه داشته باشید که دکمه Got It کلمه بعدی را نشان می دهد و امتیاز را یک بار افزایش می دهد در حالی که دکمه Skip کلمه بعدی را نشان می دهد و امتیاز را یک کاهش می دهد. دکمه پایان بازی بازی را به پایان می رساند.
- تمام کلمات را دور بزنید و توجه کنید که برنامه به طور خودکار به صفحه امتیاز حرکت می کند.
در یک کد لبه قبلی، از اتصال داده به عنوان روشی مطمئن برای دسترسی به نماها در برنامه GuessTheWord استفاده کردید. اما قدرت واقعی اتصال داده در انجام کاری است که از نام آن نشان میدهد: اتصال مستقیم دادهها به اشیاء مشاهده در برنامه شما.
معماری فعلی اپلیکیشن
در برنامه شما، نماها در طرح XML تعریف می شوند و داده های آن نماها در اشیاء ViewModel نگهداری می شوند. بین هر نما و ViewModel مربوط به آن یک کنترلر رابط کاربری وجود دارد که به عنوان یک رله بین آنها عمل می کند.

به عنوان مثال:
- دکمه Got It به عنوان نمای
Buttonدر فایل طرح بندیgame_fragment.xmlتعریف شده است. - وقتی کاربر روی دکمه Got It ضربه میزند، یک شنونده کلیک در قطعه
GameFragment، شنونده کلیک مربوطه را درGameViewModelفرا میخواند. - امتیاز در
GameViewModelبه روز شده است.
نمای Button و GameViewModel مستقیماً با هم ارتباط برقرار نمی کنند - آنها به شنونده کلیکی که در GameFragment است نیاز دارند.
ViewModel به data binding منتقل شد
سادهتر خواهد بود اگر نماهای موجود در طرحبندی مستقیماً با دادههای موجود در اشیاء ViewModel بدون تکیه بر کنترلکنندههای UI به عنوان واسطه ارتباط برقرار کنند.

اشیاء ViewModel تمام داده های رابط کاربری را در برنامه GuessTheWord نگه می دارند. با ارسال اشیاء ViewModel به اتصال داده، می توانید برخی از ارتباطات بین view ها و اشیاء ViewModel را خودکار کنید.
در این کار، کلاسهای GameViewModel و ScoreViewModel را با طرحبندی XML متناظر آنها مرتبط میکنید. همچنین اتصالات شنونده را برای مدیریت رویدادهای کلیک تنظیم می کنید.
مرحله 1: اتصال داده را برای GameViewModel اضافه کنید
در این مرحله، GameViewModel با فایل طرح بندی مربوطه، game_fragment.xml مرتبط می کنید.
- در فایل
game_fragment.xml، یک متغیر اتصال داده از نوعGameViewModelاضافه کنید. اگر در اندروید استودیو خطایی دارید، پروژه را تمیز و بازسازی کنید.
<layout ...>
<data>
<variable
name="gameViewModel"
type="com.example.android.guesstheword.screens.game.GameViewModel" />
</data>
<androidx.constraintlayout...
- در فایل
GameFragment،GameViewModelبه data binding منتقل کنید.
برای این کار،viewModelبه متغیرbinding.gameViewModelکه در مرحله قبل اعلام کردید، اختصاص دهید. این کد را بعد از مقداردهی اولیهviewModelدرonCreateView()قرار دهید. اگر در اندروید استودیو خطایی دارید، پروژه را تمیز و بازسازی کنید.
// Set the viewmodel for databinding - this allows the bound layout access
// to all the data in the ViewModel
binding.gameViewModel = viewModelمرحله 2: از اتصالات شنونده برای مدیریت رویداد استفاده کنید
Bindings شنونده عبارتهای الزامآوری هستند که وقتی رویدادهایی مانند onClick() ، onZoomIn() یا onZoomOut() راه اندازی میشوند اجرا میشوند. پیوندهای شنونده به صورت عبارات لامبدا نوشته می شوند.
اتصال داده ها یک شنونده ایجاد می کند و شنونده را در دید قرار می دهد. هنگامی که رویداد شنیده شده اتفاق می افتد، شنونده عبارت لامبدا را ارزیابی می کند. اتصالات شنونده با افزونه Android Gradle نسخه 2.0 یا بالاتر کار می کند. برای کسب اطلاعات بیشتر، Layouts and binding expressions را بخوانید.
در این مرحله، شنودهای کلیکی در GameFragment را با باندهای listener در فایل game_fragment.xml جایگزین میکنید.
- در
game_fragment.xml، ویژگیonClickرا بهskip_buttonاضافه کنید. یک عبارت binding تعریف کنید و متد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، کدی را که شنونده کلیک را برایplayAgainButtonتنظیم می کند، حذف کنید. اگر اندروید استودیو خطایی نشان داد، پروژه را تمیز و بازسازی کنید.
کد برای حذف:
binding.playAgainButton.setOnClickListener { viewModel.onPlayAgain() }- برنامه خود را اجرا کنید برنامه باید مانند قبل کار کند، اما اکنون نماهای دکمه مستقیماً با اشیاء
ViewModelارتباط برقرار می کنند. نماها دیگر از طریق کنترل کننده های کلیک دکمه درScoreFragmentارتباط برقرار نمی کنند.
عیب یابی پیام های خطای اتصال داده ها
هنگامی که یک برنامه از اتصال داده استفاده می کند، فرآیند کامپایل کلاس های میانی ایجاد می کند که برای اتصال داده استفاده می شود. یک برنامه ممکن است خطاهایی داشته باشد که Android Studio تا زمانی که برنامه را کامپایل نکنید آنها را شناسایی نمی کند، بنابراین هنگام نوشتن کد، اخطار یا کد قرمز را مشاهده نمی کنید. اما در زمان کامپایل، شما خطاهای رمزی را دریافت می کنید که از کلاس های متوسط تولید شده می آیند.
اگر یک پیام خطای مرموز دریافت کردید:
- به پیام موجود در قسمت Android Studio Build با دقت نگاه کنید. اگر مکانی را مشاهده کردید که به
databindingختم میشود، خطای اتصال داده وجود دارد. - در فایل XML طرحبندی، خطاهایی را در ویژگیهای
onClickکه از اتصال داده استفاده میکنند، بررسی کنید. به دنبال تابعی باشید که عبارت lambda فراخوانی می کند و از وجود آن اطمینان حاصل کنید. - در بخش
<data>XML، املای متغیر data-binding را بررسی کنید.
به عنوان مثال، به غلط املایی نام تابع 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 بهعنوان منبع اتصال دادهها برای اطلاع دادن به UI در مورد تغییرات دادهها، بدون استفاده از روشهای مشاهدهگر LiveData استفاده کند.
مرحله 1: کلمه LiveData را به فایل game_fragment.xml اضافه کنید
در این مرحله، نمای متن کلمه فعلی را مستقیماً به شی LiveData در ViewModel متصل میکنید.
- در
game_fragment.xml، ویژگیandroid:textرا به نمای متنword_textاضافه کنید.
با استفاده از متغیر binding، gameViewModel ، آن را روی شی LiveData ، word از 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، ناظرwordLiveDataرا حذف کنید.
کد برای حذف:
/** Setting up LiveData observation relationship **/
viewModel.word.observe(this, Observer { newWord ->
binding.wordText.text = newWord
})- برنامه خود را اجرا کنید و بازی را انجام دهید. اکنون کلمه فعلی بدون روش ناظر در کنترلر UI به روز می شود.
مرحله 2: امتیاز LiveData را به فایل score_fragment.xml اضافه کنید
در این مرحله، score LiveData را به نمای متن امتیاز در قطعه امتیاز متصل میکنید.
- در
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جایگاههایی برای کلمه فعلی و نمره فعلی هستند.
<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استفاده کنید که یک آرگومان عددی را می گیرد که با%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 بدون استفاده از کنترلکنندههای کلیک در قطعه ارتباط برقرار کنند. شما همچنین از اشیاء LiveData به عنوان منبع اتصال داده استفاده کردهاید تا به طور خودکار تغییرات در دادهها را به UI اطلاع دهد، بدون روشهای مشاهدهگر LiveData .
پروژه اندروید استودیو: GuessTheWord
- کتابخانه Data Binding به طور یکپارچه با اجزای معماری Android مانند
ViewModelوLiveDataکار می کند. - طرحبندیهای موجود در برنامه شما میتوانند به دادههای موجود در اجزای معماری متصل شوند، که از قبل به شما کمک میکنند تا چرخه عمر کنترلکننده رابط کاربری را مدیریت کنید و در مورد تغییرات دادهها مطلع شوید.
اتصال داده ViewModel
- میتوانید با استفاده از اتصال داده، یک
ViewModelبا یک طرحبندی مرتبط کنید. - اشیاء
ViewModelداده های UI را نگه می دارند. با ارسال اشیاءViewModelبه اتصال داده، می توانید برخی از ارتباطات بین view ها و اشیاءViewModelرا خودکار کنید.
چگونه یک ViewModel با یک طرح بندی مرتبط کنیم:
- در فایل طرح بندی، یک متغیر اتصال داده از نوع
ViewModelاضافه کنید.
<data>
<variable
name="gameViewModel"
type="com.example.android.guesstheword.screens.game.GameViewModel" />
</data>- در فایل
GameFragment،GameViewModelبه data binding منتقل کنید.
binding.gameViewModel = viewModelصحافی شنونده
- اتصالات شنونده عبارتهای الزامآوری در طرحبندی هستند که هنگام فعال شدن رویدادهای کلیکی مانند
onClick()اجرا میشوند. - پیوندهای شنونده به صورت عبارات لامبدا نوشته می شوند.
- با استفاده از اتصالهای شنونده، شنوندههای کلیکی را در کنترلکنندههای UI با اتصالهای شنونده در فایل طرحبندی جایگزین میکنید.
- اتصال داده ها یک شنونده ایجاد می کند و شنونده را در دید قرار می دهد.
android:onClick="@{() -> gameViewModel.onSkip()}"افزودن LiveData به داده های binding
- اشیاء
LiveDataرا می توان به عنوان یک منبع اتصال داده استفاده کرد تا به طور خودکار تغییرات در داده ها را به UI اطلاع دهد. - می توانید نمای را مستقیماً به شی
LiveDataدرViewModelمتصل کنید. هنگامی کهLiveDataدرViewModelتغییر می کند، نماهای موجود در طرح را می توان به طور خودکار به روز کرد، بدون روش های مشاهده گر در کنترلرهای UI.
android:text="@{gameViewModel.word}"- برای اینکه داده
LiveDataکار کند، فعالیت فعلی (کنترل کننده UI) را به عنوان مالک چرخه حیات متغیرbindingدر کنترلر UI تنظیم کنید.
binding.lifecycleOwner = thisقالب بندی رشته با اتصال داده
- با استفاده از اتصال داده، میتوانید یک منبع رشته را با متغیرهایی مانند
%sبرای رشتهها و%dبرای اعداد صحیح قالببندی کنید. - برای به روز رسانی ویژگی
textview، شیLiveDataرا به عنوان آرگومان به رشته قالب بندی ارسال کنید.
android:text="@{@string/quote_format(gameViewModel.word)}"دوره بی ادبی:
مستندات توسعه دهنده اندروید:
این بخش، تکالیف احتمالی را برای دانشآموزانی که در این آزمایشگاه کد به عنوان بخشی از دورهای که توسط یک مربی هدایت میشود، کار میکنند، فهرست میکند. این وظیفه مربی است که موارد زیر را انجام دهد:
- در صورت نیاز تکالیف را تعیین کنید.
- نحوه ارسال تکالیف را با دانش آموزان در میان بگذارید.
- تکالیف را نمره دهید.
مربیان میتوانند از این پیشنهادات به اندازهای که میخواهند استفاده کنند، و باید با خیال راحت هر تکلیف دیگری را که فکر میکنند مناسب است، محول کنند.
اگر به تنهایی از طریق این کدها کار می کنید، از این تکالیف برای آزمایش دانش خود استفاده کنید.
به این سوالات پاسخ دهید
سوال 1
کدام یک از عبارات زیر در مورد صحافی شنونده صحیح نیست ؟
- اتصالات شنونده عبارات الزام آور هستند که هنگام وقوع یک رویداد اجرا می شوند.
- اتصالات شنونده با تمام نسخه های پلاگین Android Gradle کار می کند.
- پیوندهای شنونده به صورت عبارات لامبدا نوشته می شوند.
- اتصالات شنونده شبیه به مراجع متد است، اما به شما امکان میدهد عبارات اتصال داده دلخواه را اجرا کنید.
سوال 2
فرض کنید برنامه شما شامل این منبع رشته است:
<string name="generic_name">Hello %s</string>
کدام یک از موارد زیر برای قالب بندی رشته با استفاده از عبارت data-binding نحو صحیحی است؟
-
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 مراجعه کنید.


