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
ViewModel
nesnelerini kullanma LiveData
kullanarakViewModel
içinde veri depolamaLiveData
verilerindeki değişiklikleri gözlemlemek için nasıl gözlemci yöntemleri eklenir?
Neler öğreneceksiniz?
- Veri Bağlama Kitaplığı'nın öğelerini kullanma
ViewModel
ile veri bağlamayı entegre etmeLiveData
ile 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
ViewModel
nesneleriyle dolaylı olarak iletişim kurar. Bu codelab'de, görünümlerinViewModel
nesneleriyle doğrudan iletişim kurabilmesi için uygulamanın görünümleriniViewModel
nesnelerine bağlıyorsunuz. - Uygulamayı, veri bağlama kaynağı olarak
LiveData
'yı kullanacak şekilde değiştirirsiniz. Bu değişiklikten sonraLiveData
nesneleri, verilerdeki değişiklikler hakkında kullanıcı arayüzünü bilgilendirir veLiveData
gö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.xml
düzen dosyasındaButton
görünümü olarak tanımlanır. - Kullanıcı Anladım düğmesine dokunduğunda,
GameFragment
parçasındaki bir tıklama işleyici,GameViewModel
içindeki ilgili tıklama işleyiciyi çağırır. - Puan,
GameViewModel
bö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.xml
dosyasında,GameViewModel
tü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...
GameFragment
dosyasında,GameViewModel
öğesini veri bağlamaya iletin.
Bunu yapmak için önceki adımda bildirdiğinizbinding.gameViewModel
değişkenineviewModel
değerini atayın. Bu koduonCreateView()
içine,viewModel
baş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 = viewModel
2. 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.xml
içindeskip_button
öğesineonClick
özelliğini ekleyin. Bir bağlama ifadesi tanımlayın veGameViewModel
iç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ğiniGameViewModel
içindekionCorrect
()
yöntemine bağlayın.
<Button
android:id="@+id/correct_button"
...
android:onClick="@{() -> gameViewModel.onCorrect()}"
... />
end_game_button
öğesinin tıklama etkinliğiniGameViewModel
içindekionGameFinish
()
yöntemine bağlayın.
<Button
android:id="@+id/end_game_button"
...
android:onClick="@{() -> gameViewModel.onGameFinish()}"
... />
GameFragment
iç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.xml
dosyasındaScoreViewModel
türünde bir bağlama değişkeni ekleyin. Bu adım, yukarıdakiGameViewModel
için yaptığınız işleme benzer.
<layout ...>
<data>
<variable
name="scoreViewModel"
type="com.example.android.guesstheword.screens.score.ScoreViewModel" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
score_fragment.xml
içindeplay_again_button
öğesineonClick
özelliğini ekleyin. Bir işleyici bağlaması tanımlayın veScoreViewModel
içindeonPlayAgain()
yöntemini çağırın.
<Button
android:id="@+id/play_again_button"
...
android:onClick="@{() -> scoreViewModel.onPlayAgain()}"
... />
ScoreFragment
içinde,onCreateView()
klasöründeviewModel
öğesini başlatın. Ardındanbinding.scoreViewModel
bağlama değişkenini başlatın.
viewModel = ...
binding.scoreViewModel = viewModel
ScoreFragment
içinde,playAgainButton
iç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
ViewModel
nesneleriyle iletişim kurar. Görünümler artıkScoreFragment
iç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.
databinding
ile 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.xml
içindeword_text
metin 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.
GameFragment
içinde,onCreateView()
içinde,gameViewModel
başlatıldıktan sonra mevcut etkinliğibinding
değişkeninin yaşam döngüsü sahibi olarak ayarlayın. Bu, yukarıdakiLiveData
nesnesinin kapsamını tanımlar ve nesnenin düzengame_fragment.xml
iç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 = this
GameFragment
içinde,LiveData
word
iç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.xml
içinde,android:text
özelliğini puan metni görünümüne ekleyin.scoreViewModel.score
değerinitext
özelliğine atayın.score
bir tamsayı olduğundanString.valueOf()
kullanarak dizeye dönüştürün.
<TextView
android:id="@+id/score_text"
...
android:text="@{String.valueOf(scoreViewModel.score)}"
... />
ScoreFragment
içinde,scoreViewModel
başlatıldıktan sonra mevcut etkinliğibinding
değ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 = this
ScoreFragment
içinde,score
nesnesinin 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.xml
içinde,word
vescore
metin görünümlerini biçimlendirmek için kullanacağınız aşağıdaki dizeleri ekleyin.%s
ve%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.xml
içinde,quote_format
dize kaynağını kullanmak içinword_text
metin görünümününtext
özelliğini güncelleyin.gameViewModel.word
uygulaması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)}"
... />
score
metin görünümünüword_text
'e benzer şekilde biçimlendirin.game_fragment.xml
içinde,score_text
metin görünümünetext
özelliğini ekleyin.%d
yer tutucusuyla gösterilen sayısal bir bağımsız değişken alanscore_format
dize kaynağını kullanın.LiveData
nesnesini (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)}"
... />
GameFragment
sınıfında,onCreateView()
yönteminin içindekiscore
gö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ığı,
ViewModel
veLiveData
gibi 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
ViewModel
ile düzen ilişkilendirebilirsiniz. ViewModel
nesneleri, kullanıcı arayüzü verilerini tutar. Veri bağlamayaViewModel
nesneleri ileterek görünümler veViewModel
nesneleri arasındaki iletişimin bir kısmını otomatikleştirebilirsiniz.
ViewModel
öğesini düzenle ilişkilendirme:
- Düzen dosyasına
ViewModel
türünde bir veri bağlama değişkeni ekleyin.
<data>
<variable
name="gameViewModel"
type="com.example.android.guesstheword.screens.game.GameViewModel" />
</data>
GameFragment
dosyasında,GameViewModel
öğesini veri bağlamaya iletin.
binding.gameViewModel = viewModel
Dinleyici 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
LiveData
nesneleri, 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
ViewModel
içindekiLiveData
nesnesine bağlayabilirsiniz.ViewModel
içindekiLiveData
değ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}"
LiveData
veri bağlamanın çalışması için mevcut etkinliği (kullanıcı arayüzü denetleyicisi), kullanıcı arayüzü denetleyicisindekibinding
değişkeninin yaşam döngüsü sahibi olarak ayarlayın.
binding.lifecycleOwner = this
Veri bağlama ile dize biçimlendirme
- Veri bağlama özelliğini kullanarak bir dize kaynağını
%s
gibi dizeler ve%d
gibi tam sayılar için yer tutucularla biçimlendirebilirsiniz. - Görünümün
text
özelliğini güncellemek içinLiveData
nesnesini 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?
LiveData
tarafı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.