Bu codelab, Android Kotlin Hakkında Temel Bilgiler kursunun bir parçasıdır. Bu kurstan en iyi şekilde yararlanmak için codelab'leri sırayla tamamlamanızı öneririz. Kursla ilgili tüm codelab'ler Android Kotlin Hakkında Temel Bilgiler codelab'leri açılış sayfasında listelenir.
Giriş
Bu dersteki önceki codelab'lerde GuessTheWord uygulamasının kodunu iyileştirdiniz. Uygulama artık ViewModel nesnelerini kullandığı için uygulama verileri, ekran döndürme ve klavye kullanılabilirliğindeki değişiklikler gibi cihaz yapılandırma değişikliklerinden etkilenmiyor. Ayrıca, gözlemlenebilir LiveData eklediğiniz için gözlemlenen veriler değiştiğinde görünümlere otomatik olarak bildirim gönderilir.
Bu codelab'de GuessTheWord uygulamasıyla çalışmaya devam ediyorsunuz. Düzeninizdeki görünümlerin doğrudan ViewModel nesneleriyle iletişim kurması için görünümleri uygulamadaki ViewModel sınıflarına bağlıyorsunuz. (Uygulamanızda şu ana kadar görünümler, uygulamanın parçaları aracılığıyla ViewModel ile dolaylı olarak iletişim kuruyordu.) Veri bağlamayı ViewModel nesneleriyle entegre ettikten sonra uygulamanın parçalarında artık tıklama işleyicilere ihtiyacınız olmaz. Bu nedenle, bunları kaldırırsınız.
Ayrıca, LiveData gözlemci yöntemlerini kullanmadan verilerdeki değişiklikler hakkında kullanıcı arayüzünü bilgilendirmek için GuessTheWord uygulamasını LiveData veri bağlama kaynağı olarak kullanacak şekilde değiştirirsiniz.
Bilmeniz gerekenler
- Kotlin'de temel Android uygulamaları oluşturma
- Etkinlik ve parça yaşam döngülerinin işleyiş şekli.
- Uygulamanızda
ViewModelnesnelerini kullanma LiveDatakullanarakViewModeliçinde veri depolamaLiveDataverilerindeki değişiklikleri gözlemlemek için nasıl gözlemci yöntemleri eklenir?
Neler öğreneceksiniz?
- Veri Bağlama Kitaplığı'nın öğelerini kullanma
ViewModelile veri bağlamayı entegre etmeLiveDataile veri bağlamayı entegre etme- Bir parçadaki tıklama işleyicilerini değiştirmek için işleyici bağlamaları nasıl kullanılır?
- Veri bağlama ifadelerine dize biçimlendirmesi ekleme
Yapacaklarınız
- GuessTheWord düzenlerindeki görünümler, bilgileri aktarmak için kullanıcı arayüzü denetleyicilerini (parçalar) kullanarak
ViewModelnesneleriyle dolaylı olarak iletişim kurar. Bu codelab'de, görünümlerinViewModelnesneleriyle doğrudan iletişim kurabilmesi için uygulamanın görünümleriniViewModelnesnelerine bağlıyorsunuz. - Uygulamayı, veri bağlama kaynağı olarak
LiveData'yı kullanacak şekilde değiştirirsiniz. Bu değişiklikten sonraLiveDatanesneleri, verilerdeki değişiklikler hakkında kullanıcı arayüzünü bilgilendirir veLiveDatagözlemci yöntemlerine artık gerek kalmaz.
5. dersteki codelab'lerde, başlangıç koduyla başlayarak GuessTheWord uygulamasını geliştirirsiniz. GuessTheWord, iki oyuncunun mümkün olan en yüksek puanı elde etmek için işbirliği yaptığı, sessiz sinema tarzı bir oyundur.
Birinci oyuncu, uygulamadaki kelimelere bakar ve her birini sırayla canlandırır. Kelimeyi ikinci oyuncuya göstermemeye dikkat eder. İkinci oyuncu kelimeyi tahmin etmeye çalışır.
Oyunu oynamak için ilk oyuncu cihazda uygulamayı açar ve aşağıdaki ekran görüntüsünde gösterildiği gibi bir kelime (ör. "gitar") görür.
İlk oyuncu, kelimeyi söylememeye dikkat ederek kelimeyi canlandırır.
- İkinci oyuncu kelimeyi doğru tahmin ettiğinde birinci oyuncu Bildim düğmesine basar. Bu işlem, sayıyı bir artırır ve sonraki kelimeyi gösterir.
- İkinci oyuncu kelimeyi tahmin edemezse birinci oyuncu Atla düğmesine basar. Bu durumda sayı bir azalır ve bir sonraki kelimeye geçilir.
- Oyunu sonlandırmak için End Game (Oyunu Sonlandır) düğmesine basın. (Bu işlev, serideki ilk codelab'in başlangıç kodunda yer almaz.)
Bu codelab'de, LiveData veri bağlamayı ViewModel nesneleriyle entegre ederek GuessTheWord uygulamasını iyileştireceksiniz. Bu, düzendeki görünümler ile ViewModel nesneler arasındaki iletişimi otomatikleştirir ve LiveData kullanarak kodunuzu basitleştirmenize olanak tanır.
Başlık ekranı |
Oyun ekranı |
Puan ekranı |
Bu görevde, bu codelab için başlangıç kodunuzu bulup çalıştıracaksınız. Başlangıç kodu olarak önceki codelab'de oluşturduğunuz GuessTheWord uygulamasını kullanabilir veya bir başlangıç uygulaması indirebilirsiniz.
- (İsteğe bağlı) Önceki codelab'deki kodunuzu kullanmıyorsanız bu codelab'in başlangıç kodunu indirin. Kodu açın ve projeyi Android Studio'da açın.
- Uygulamayı çalıştırın ve oyunu oynayın.
- Anladım düğmesinin sonraki kelimeyi gösterdiğini ve puanı bir artırdığını, Atla düğmesinin ise sonraki kelimeyi gösterdiğini ve puanı bir azalttığını unutmayın. Oyunu Bitir düğmesi oyunu sonlandırır.
- Tüm kelimeleri inceleyin. Uygulamanın otomatik olarak puan ekranına gittiğini göreceksiniz.
Önceki bir codelab'de, GuessTheWord uygulamasındaki görünümlere tür güvenli bir şekilde erişmek için veri bağlamayı kullanmıştınız. Ancak veri bağlamanın gerçek gücü, adının da belirttiği gibi verileri uygulamanızdaki görünüm nesnelerine doğrudan bağlamasında yatar.
Mevcut uygulama mimarisi
Uygulamanızda görünümler XML düzeninde tanımlanır ve bu görünümlerin verileri ViewModel nesnelerinde tutulur. Her görünüm ile karşılık gelen ViewModel arasında, bunlar arasında röle görevi gören bir kullanıcı arayüzü denetleyicisi bulunur.

Örneğin:
- Anladım düğmesi,
game_fragment.xmldüzen dosyasındaButtongörünümü olarak tanımlanır. - Kullanıcı Anladım düğmesine dokunduğunda,
GameFragmentparçasındaki bir tıklama işleyici,GameViewModeliçindeki ilgili tıklama işleyiciyi çağırır. - Puan,
GameViewModelbölümünde güncellenir.
Button görünümü ve GameViewModel doğrudan iletişim kurmaz. GameFragment içindeki tıklama dinleyicisine ihtiyaç duyarlar.
ViewModel, veri bağlamaya iletildi (ViewModel passed into the data binding)
Düzenlerdeki görünümlerin, aracı olarak kullanıcı arayüzü denetleyicilerine güvenmeden doğrudan ViewModel nesnelerindeki verilerle iletişim kurması daha basit olurdu.

ViewModel nesneleri, GuessTheWord uygulamasındaki tüm kullanıcı arayüzü verilerini tutar. ViewModel nesnelerini veri bağlamaya ileterek görünümler ile ViewModel nesneleri arasındaki iletişimin bir kısmını otomatikleştirebilirsiniz.
Bu görevde, GameViewModel ve ScoreViewModel sınıflarını ilgili XML düzenleriyle ilişkilendirirsiniz. Tıklama etkinliklerini işlemek için işleyici bağlamaları da ayarlarsınız.
1. adım: GameViewModel için veri bağlama ekleyin
Bu adımda, GameViewModel öğesini ilgili düzen dosyası game_fragment.xml ile ilişkilendirirsiniz.
game_fragment.xmldosyasında,GameViewModeltüründe bir veri bağlama değişkeni ekleyin. Android Studio'da hatalar varsa projeyi temizleyip yeniden oluşturun.
<layout ...>
<data>
<variable
name="gameViewModel"
type="com.example.android.guesstheword.screens.game.GameViewModel" />
</data>
<androidx.constraintlayout...
GameFragmentdosyasında,GameViewModelöğesini veri bağlamaya iletin.
Bunu yapmak için önceki adımda bildirdiğinizbinding.gameViewModeldeğişkenineviewModeldeğerini atayın. Bu koduonCreateView()içine,viewModelbaşlatıldıktan sonra yerleştirin. Android Studio'da hatalar varsa projeyi temizleyip yeniden oluşturun.
// Set the viewmodel for databinding - this allows the bound layout access
// to all the data in the ViewModel
binding.gameViewModel = viewModel2. adım: Etkinlik işleme için dinleyici bağlamalarını kullanın
İşleyici bağlamaları, onClick(), onZoomIn() veya onZoomOut() gibi etkinlikler tetiklendiğinde çalışan bağlama ifadeleridir. Dinleyici bağlamaları lambda ifadeleri olarak yazılır.
Veri bağlama, bir işleyici oluşturur ve işleyiciyi görünümde ayarlar. Dinlenen etkinlik gerçekleştiğinde dinleyici, lambda ifadesini değerlendirir. Dinleyici bağlamaları, Android Gradle eklentisinin 2.0 veya sonraki sürümleriyle çalışır. Daha fazla bilgi edinmek için Düzenler ve bağlama ifadeleri başlıklı makaleyi inceleyin.
Bu adımda, GameFragment içindeki tıklama işleyicilerini game_fragment.xml dosyasındaki işleyici bağlamalarıyla değiştirirsiniz.
game_fragment.xmliçindeskip_buttonöğesineonClicközelliğini ekleyin. Bir bağlama ifadesi tanımlayın veGameViewModeliçindeonSkip()yöntemini çağırın. Bu bağlama ifadesine dinleyici bağlama adı verilir.
<Button
android:id="@+id/skip_button"
...
android:onClick="@{() -> gameViewModel.onSkip()}"
... />- Benzer şekilde,
correct_buttonöğesinin tıklama etkinliğiniGameViewModeliçindekionCorrect()yöntemine bağlayın.
<Button
android:id="@+id/correct_button"
...
android:onClick="@{() -> gameViewModel.onCorrect()}"
... />end_game_buttonöğesinin tıklama etkinliğiniGameViewModeliçindekionGameFinish()yöntemine bağlayın.
<Button
android:id="@+id/end_game_button"
...
android:onClick="@{() -> gameViewModel.onGameFinish()}"
... />GameFragmentiçinde, tıklama dinleyicilerini ayarlayan ifadeleri ve tıklama dinleyicilerinin çağırdığı işlevleri kaldırın. Artık ihtiyacınız yoksa
Kaldırılacak kod:
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. adım: ScoreViewModel için veri bağlama ekleyin
Bu adımda, ScoreViewModel öğesini ilgili düzen dosyası score_fragment.xml ile ilişkilendirirsiniz.
score_fragment.xmldosyasındaScoreViewModeltüründe bir bağlama değişkeni ekleyin. Bu adım, yukarıdakiGameViewModeliçin yaptığınız işleme benzer.
<layout ...>
<data>
<variable
name="scoreViewModel"
type="com.example.android.guesstheword.screens.score.ScoreViewModel" />
</data>
<androidx.constraintlayout.widget.ConstraintLayoutscore_fragment.xmliçindeplay_again_buttonöğesineonClicközelliğini ekleyin. Bir işleyici bağlaması tanımlayın veScoreViewModeliçindeonPlayAgain()yöntemini çağırın.
<Button
android:id="@+id/play_again_button"
...
android:onClick="@{() -> scoreViewModel.onPlayAgain()}"
... />ScoreFragmentiçinde,onCreateView()klasöründeviewModelöğesini başlatın. Ardındanbinding.scoreViewModelbağlama değişkenini başlatın.
viewModel = ...
binding.scoreViewModel = viewModelScoreFragmentiçinde,playAgainButtoniçin tıklama dinleyicisini ayarlayan kodu kaldırın. Android Studio bir hata gösterirse projeyi temizleyip yeniden oluşturun.
Kaldırılacak kod:
binding.playAgainButton.setOnClickListener { viewModel.onPlayAgain() }- Uygulamanızı çalıştırın. Uygulama eskisi gibi çalışmaya devam eder ancak artık düğme görünümleri doğrudan
ViewModelnesneleriyle iletişim kurar. Görünümler artıkScoreFragmentiçindeki düğme tıklama işleyicileri aracılığıyla iletişim kurmuyor.
Veri bağlama hata mesajlarıyla ilgili sorunları giderme
Bir uygulama veri bağlama kullandığında derleme işlemi, veri bağlama için kullanılan ara sınıflar oluşturur. Bir uygulamada, uygulamayı derlemeye çalışana kadar Android Studio'nun algılamadığı hatalar olabilir. Bu nedenle, kodu yazarken uyarı veya kırmızı kod görmezsiniz. Ancak derleme zamanında, oluşturulan ara sınıflardan kaynaklanan anlaşılması zor hatalar alırsınız.
Anlaşılması zor bir hata mesajı alırsanız:
- Android Studio'daki Build (Derleme) bölmesinde iletiye dikkatlice bakın.
databindingile biten bir konum görüyorsanız veri bağlama ile ilgili bir hata vardır. - Düzen XML dosyasında, veri bağlama kullanan
onClicközelliklerinde hata olup olmadığını kontrol edin. Lambda ifadesinin çağırdığı işlevi bulun ve bu işlevin mevcut olduğundan emin olun. - XML'in
<data>bölümünde, veri bağlama değişkeninin yazımını kontrol edin.
Örneğin, aşağıdaki özellik değerinde onCorrect() işlev adının yanlış yazıldığına dikkat edin:
android:onClick="@{() -> gameViewModel.onCorrectx()}"
Ayrıca, XML dosyasının <data> bölümündeki gameViewModel yazım hatasına da dikkat edin:
<data>
<variable
name="gameViewModelx"
type="com.example.android.guesstheword.screens.game.GameViewModel" />
</data>Android Studio, uygulamayı derleyene kadar bu tür hataları algılamaz. Derleyici daha sonra aşağıdaki gibi bir hata mesajı gösterir:
error: cannot find symbol import com.example.android.guesstheword.databinding.GameFragmentBindingImpl" symbol: class GameFragmentBindingImpl location: package com.example.android.guesstheword.databinding
Veri bağlama, ViewModel nesneleriyle kullanılan LiveData ile iyi çalışır. ViewModel nesnelerine veri bağlama eklediğinize göre artık LiveData'yi dahil etmeye hazırsınız.
Bu görevde, LiveData gözlemci yöntemlerini kullanmadan verilerdeki değişiklikler hakkında kullanıcı arayüzünü bilgilendirmek için GuessTheWord uygulamasını LiveData veri bağlama kaynağı olarak kullanacak şekilde değiştiriyorsunuz.
1. adım: game_fragment.xml dosyasına LiveData kelimesini ekleyin
Bu adımda, mevcut kelime metni görünümünü doğrudan ViewModel içindeki LiveData nesnesine bağlıyorsunuz.
game_fragment.xmliçindeword_textmetin görünümüneandroid:textözelliğini ekleyin.
Bağlama değişkeni gameViewModel kullanarak LiveData nesnesini GameViewModel öğesinden word olarak ayarlayın.
<TextView
android:id="@+id/word_text"
...
android:text="@{gameViewModel.word}"
... />word.value kullanmanız gerekmediğini unutmayın. Bunun yerine gerçek LiveData nesnesini kullanabilirsiniz. LiveData nesnesi, word öğesinin geçerli değerini gösterir. word değerinin boş olması durumunda LiveData nesnesi boş bir dize gösterir.
GameFragmentiçinde,onCreateView()içinde,gameViewModelbaşlatıldıktan sonra mevcut etkinliğibindingdeğişkeninin yaşam döngüsü sahibi olarak ayarlayın. Bu, yukarıdakiLiveDatanesnesinin kapsamını tanımlar ve nesnenin düzengame_fragment.xmliçindeki görünümleri otomatik olarak güncellemesine olanak tanır.
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 = thisGameFragmentiçinde,LiveDatawordiçin gözlemciyi kaldırın.
Kaldırılacak kod:
/** Setting up LiveData observation relationship **/
viewModel.word.observe(this, Observer { newWord ->
binding.wordText.text = newWord
})- Uygulamanızı çalıştırın ve oyunu oynayın. Artık mevcut kelime, kullanıcı arayüzü denetleyicisinde bir gözlemci yöntemi olmadan güncelleniyor.
2. adım: score_fragment.xml dosyasına LiveData puanını ekleyin
Bu adımda, LiveData score öğesini skor parçasındaki skor metni görünümüne bağlıyorsunuz.
score_fragment.xmliçinde,android:textözelliğini puan metni görünümüne ekleyin.scoreViewModel.scoredeğerinitextözelliğine atayın.scorebir tamsayı olduğundanString.valueOf()kullanarak dizeye dönüştürün.
<TextView
android:id="@+id/score_text"
...
android:text="@{String.valueOf(scoreViewModel.score)}"
... />ScoreFragmentiçinde,scoreViewModelbaşlatıldıktan sonra mevcut etkinliğibindingdeğişkeninin yaşam döngüsü sahibi olarak ayarlayın.
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 = thisScoreFragmentiçinde,scorenesnesinin gözlemcisini kaldırın.
Kaldırılacak kod:
// Add observer for score
viewModel.score.observe(this, Observer { newScore ->
binding.scoreText.text = newScore.toString()
})- Uygulamanızı çalıştırın ve oyunu oynayın. Puan parçasındaki puanın, puan parçasında gözlemci olmadan doğru şekilde görüntülendiğini fark edin.
3. adım: Veri bağlama ile dize biçimlendirmesi ekleyin
Düzende, veri bağlamanın yanı sıra dize biçimlendirme de ekleyebilirsiniz. Bu görevde, geçerli kelimeyi tırnak içine alacak şekilde biçimlendiriyorsunuz. Ayrıca, aşağıdaki resimde gösterildiği gibi puan dizesini Current Score ile önek oluşturacak şekilde biçimlendirirsiniz.

string.xmliçinde,wordvescoremetin görünümlerini biçimlendirmek için kullanacağınız aşağıdaki dizeleri ekleyin.%sve%d, mevcut kelime ve mevcut puan için yer tutuculardır.
<string name="quote_format">\"%s\"</string>
<string name="score_format">Current Score: %d</string>game_fragment.xmliçinde,quote_formatdize kaynağını kullanmak içinword_textmetin görünümününtextözelliğini güncelleyin.gameViewModel.worduygulamasında kart. Bu, biçimlendirme dizesine bağımsız değişken olarak geçerli kelimeyi iletir.
<TextView
android:id="@+id/word_text"
...
android:text="@{@string/quote_format(gameViewModel.word)}"
... />scoremetin görünümünüword_text'e benzer şekilde biçimlendirin.game_fragment.xmliçinde,score_textmetin görünümünetextözelliğini ekleyin.%dyer tutucusuyla gösterilen sayısal bir bağımsız değişken alanscore_formatdize kaynağını kullanın.LiveDatanesnesini (score) bu biçimlendirme dizesine bağımsız değişken olarak iletin.
<TextView
android:id="@+id/score_text"
...
android:text="@{@string/score_format(gameViewModel.score)}"
... />GameFragmentsınıfında,onCreateView()yönteminin içindekiscoregözlemci kodunu kaldırın.
Kaldırılacak kod:
viewModel.score.observe(this, Observer { newScore ->
binding.scoreText.text = newScore.toString()
})- Uygulamanızı temizleyin, yeniden oluşturun ve çalıştırın, ardından oyunu oynayın. Mevcut kelimenin ve puanın oyun ekranında biçimlendirildiğini unutmayın.

Tebrikler! Uygulamanızda LiveData ve ViewModel'yi veri bağlama ile entegre ettiniz. Bu sayede, düzeninizdeki görünümler, parçadaki tıklama işleyicilerini kullanmadan doğrudan ViewModel ile iletişim kurabilir. Ayrıca, LiveData gözlemci yöntemleri olmadan verilerdeki değişiklikler hakkında kullanıcı arayüzünü otomatik olarak bilgilendirmek için veri bağlama kaynağı olarak LiveData nesnelerini kullandınız.
Android Studio projesi: GuessTheWord
- Veri Bağlama Kitaplığı,
ViewModelveLiveDatagibi Android Architecture Components ile sorunsuz bir şekilde çalışır. - Uygulamanızdaki düzenler, kullanıcı arayüzü denetleyicisinin yaşam döngüsünü yönetmenize ve verilerdeki değişiklikler hakkında bildirim göndermenize yardımcı olan Architecture Components'taki verilere bağlanabilir.
ViewModel veri bağlama
- Veri bağlama özelliğini kullanarak bir
ViewModelile düzen ilişkilendirebilirsiniz. ViewModelnesneleri, kullanıcı arayüzü verilerini tutar. Veri bağlamayaViewModelnesneleri ileterek görünümler veViewModelnesneleri arasındaki iletişimin bir kısmını otomatikleştirebilirsiniz.
ViewModel öğesini düzenle ilişkilendirme:
- Düzen dosyasına
ViewModeltüründe bir veri bağlama değişkeni ekleyin.
<data>
<variable
name="gameViewModel"
type="com.example.android.guesstheword.screens.game.GameViewModel" />
</data>GameFragmentdosyasında,GameViewModelöğesini veri bağlamaya iletin.
binding.gameViewModel = viewModelDinleyici bağlamaları
- İşleyici bağlamaları, düzen içinde
onClick()gibi tıklama etkinlikleri tetiklendiğinde çalışan bağlama ifadeleridir. - Dinleyici bağlamaları lambda ifadeleri olarak yazılır.
- Dinleyici bağlamalarını kullanarak kullanıcı arayüzü denetleyicilerindeki tıklama dinleyicilerini düzen dosyasındaki dinleyici bağlamalarıyla değiştirirsiniz.
- Veri bağlama, bir işleyici oluşturur ve işleyiciyi görünümde ayarlar.
android:onClick="@{() -> gameViewModel.onSkip()}"Veri bağlamaya LiveData ekleme
LiveDatanesneleri, verilerdeki değişiklikler hakkında kullanıcı arayüzünü otomatik olarak bilgilendirmek için veri bağlama kaynağı olarak kullanılabilir.- Görünümü doğrudan
ViewModeliçindekiLiveDatanesnesine bağlayabilirsiniz.ViewModeliçindekiLiveDatadeğiştiğinde, düzendeki görünümler kullanıcı arayüzü denetleyicilerindeki gözlemci yöntemleri olmadan otomatik olarak güncellenebilir.
android:text="@{gameViewModel.word}"LiveDataveri bağlamanın çalışması için mevcut etkinliği (kullanıcı arayüzü denetleyicisi), kullanıcı arayüzü denetleyicisindekibindingdeğişkeninin yaşam döngüsü sahibi olarak ayarlayın.
binding.lifecycleOwner = thisVeri bağlama ile dize biçimlendirme
- Veri bağlama özelliğini kullanarak bir dize kaynağını
%sgibi dizeler ve%dgibi tam sayılar için yer tutucularla biçimlendirebilirsiniz. - Görünümün
textözelliğini güncellemek içinLiveDatanesnesini biçimlendirme dizesine bağımsız değişken olarak iletin.
android:text="@{@string/quote_format(gameViewModel.word)}"Udacity kursu:
Android geliştirici belgeleri:
Bu bölümde, bir eğitmenin yönettiği kurs kapsamında bu codelab'i tamamlayan öğrenciler için olası ödevler listelenmektedir. Eğitmen, aşağıdakileri yapmalıdır:
- Gerekirse ödev atayın.
- Öğrencilere ev ödevi ödevlerini nasıl göndereceklerini bildirin.
- Ödevlere not verin.
Eğitmenler bu önerileri istedikleri kadar kullanabilir ve uygun olduğunu düşündükleri diğer ödevleri verebilirler.
Bu codelab'i kendi başınıza tamamlıyorsanız bilginizi test etmek için bu ödevleri kullanabilirsiniz.
Bu soruları yanıtlayın
1. Soru
Aşağıdaki ifadelerden hangisi dinleyici bağlamaları hakkında yanlıştır?
- Dinleyici bağlamaları, bir etkinlik gerçekleştiğinde çalışan bağlama ifadeleridir.
- Dinleyici bağlamaları, Android Gradle eklentisinin tüm sürümleriyle çalışır.
- Dinleyici bağlamaları lambda ifadeleri olarak yazılır.
- Dinleyici bağlamaları, yöntem referanslarına benzer ancak rastgele veri bağlama ifadeleri çalıştırmanıza olanak tanır.
2. Soru
Uygulamanızın şu dize kaynağını içerdiğini varsayalım:<string name="generic_name">Hello %s</string>
Aşağıdakilerden hangisi, veri bağlama ifadesini kullanarak dizeyi biçimlendirmek için doğru söz dizimidir?
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. Soru
Dinleyiciye bağlı ifadeler ne zaman değerlendirilir ve çalıştırılır?
LiveDatatarafından tutulan veriler değiştirildiğinde- Bir etkinlik, yapılandırma değişikliği nedeniyle yeniden oluşturulduğunda
onClick()gibi bir etkinlik gerçekleştiğinde- Etkinlik arka plana alındığında
Bir sonraki derse başlayın:
Bu kurstaki diğer codelab'lerin bağlantılarını Android Kotlin Hakkında Temel Bilgiler codelab'leri açılış sayfasında bulabilirsiniz.


