این کد لبه بخشی از دوره آموزشی 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>
اندروید استودیو تا زمانی که برنامه را کامپایل نکنید، چنین خطاهایی را شناسایی نمی کند و سپس کامپایلر پیام خطایی مانند زیر را نشان می دهد:
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
تهی باشد، شی 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
، ناظرword
LiveData
را حذف کنید.
کد برای حذف:
/** 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
کار می کند. - طرحبندیهای موجود در برنامه شما میتوانند به دادههای موجود در اجزای معماری متصل شوند، که از قبل به شما کمک میکنند چرخه عمر کنترلر UI را مدیریت کنید و در مورد تغییرات دادهها مطلع شوید.
اتصال داده ViewModel
- شما می توانید یک
ViewModel
را با یک طرح بندی با استفاده از اتصال داده مرتبط کنید. - اشیاء
ViewModel
داده های UI را نگه می دارند. با ارسال اشیاءViewModel
به اتصال داده، می توانید برخی از ارتباطات بین view ها و اشیاءViewModel
را خودکار کنید.
چگونه یک ViewModel
را با یک طرح بندی مرتبط کنیم:
- در فایل layout، یک متغیر data-binding از نوع
ViewModel
اضافه کنید.
<data>
<variable
name="gameViewModel"
type="com.example.android.guesstheword.screens.game.GameViewModel" />
</data>
- در فایل
GameFragment
،GameViewModel
را به data binding منتقل کنید.
binding.gameViewModel = viewModel
صحافی شنونده
- Bindings شنونده عبارتهای الزامآور در طرحبندی هستند که هنگام فعال شدن رویدادهای کلیک مانند
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
برای اعداد صحیح قالب بندی کنید. - برای به روز رسانی ویژگی
text
view، شی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 مراجعه کنید.