Android Kotlin Fundamentals 05.3: ViewModel ve LiveData ile veri bağlama

Bu codelab, Android Kotlin Temelleri kursuna dahildir. Codelab'ler üzerinden sırayla çalışıyorsanız bu kurstan en iyi şekilde yararlanabilirsiniz. Tüm kurs codelab'leri Android Kotlin Fundamentals codelabs açılış sayfasında listelenmektedir.

Giriş

Bu dersteki önceki codelab'lerde, GuessTheWord uygulaması için kodu iyileştirdiniz. Uygulama artık ViewModel nesneleri kullandığından, uygulama rotasyonlarında ekran rotasyonları ve klavye kullanılabilirliği gibi değişiklikler yapıldı. Ayrıca, gözlemlenebilir LiveData değerini de eklediniz. Bu nedenle, gözlemlenen veriler değiştiğinde görünümler otomatik olarak bilgilendirilir.

Bu codelab'de, GuessTheWord uygulamasıyla çalışmaya devam edersiniz. Görüntülemeyi uygulamadaki ViewModel derse bağlarsınız. Böylece düzeninizdeki görünümler doğrudan ViewModel nesneleriyle iletişim kurar. (Şimdiye kadar uygulamanızda görüntülemeler, 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 tıklama işleyicilere artık ihtiyacınız olmadığından bunları kaldırırsınız.

Ayrıca, GuessTheWord uygulamasını, LiveData gözlemleyici yöntemlerini kullanmadan, verilerdeki değişiklikler konusunda kullanıcı arayüzünü bilgilendirmek amacıyla veri bağlama kaynağı olarak LiveData 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 ViewModel kullanılarak veriler nasıl depolanır?
  • LiveData verilerindeki değişiklikleri gözlemlemek için gözlemci yöntemlerini ekleme.

Neler öğreneceksiniz?

  • Veri Bağlama Kitaplığı'nın öğeleri nasıl kullanılır?
  • ViewModel ile veri bağlama nasıl entegre edilir?
  • LiveData ile veri bağlama nasıl entegre edilir?
  • Bir parçadaki tıklama işleyicileri değiştirmek için dinleyici bağlamalarını kullanma.
  • Veri bağlama ifadelerine dize biçimlendirmesi ekleme.

Yapacaklarınız

  • GuessTheWord düzenleri, bilgileri aktarmak için kullanıcı arayüzü denetleyicilerini (parçalar) kullanarak dolaylı olarak ViewModel nesneleriyle iletişim kurar. Bu codelab'de, uygulamanın görünümleriyle ViewModel nesnelerini bağlarsınız. Böylece görünümler, ViewModel nesneleriyle doğrudan iletişim kurar.
  • Uygulamayı, veri bağlama kaynağı olarak LiveData kullanacak şekilde değiştirirsiniz. Bu değişiklikten sonra LiveData nesneleri, kullanıcı arayüzündeki verilerdeki değişiklikleri bildirir ve LiveData gözlemleyici yöntemlerine artık gerek yoktur.

5. Ders codelab'lerinde ise GuessTheWord uygulamasını, başlangıç koduyla başlayabilirsiniz. GuessTheWord, oyuncuların mümkün olan en yüksek skoru elde etmek için işbirliği yaptığı iki kişilik karalar tarzı bir oyun.

İlk oyuncu uygulamadaki kelimelere bakar ve her birini sırayla uygulamaya koyar, kelimeyi ikinci oyuncuya göstermemeye dikkat eder. İkinci oyuncu kelimeyi tahmin etmeye çalışır.

İlk oyuncu, oyunu oynamak için cihazda uygulamayı açar ve aşağıdaki ekran görüntüsünde bulunan "gitar" gibi bir kelime görür.

İlk oyuncu, kelimeyi bilerek hareket etmemeye dikkat eder.

  • İkinci oyuncu kelimeyi doğru tahmin ettiğinde ilk oyuncu Anladım düğmesine basar ve sayıları bir artırır, ardından da gelen kelimeyi gösterir.
  • İkinci oyuncu kelimeyi tahmin edemezse ilk oyuncu Atla düğmesine basar, bu şekilde sayı bir azalır ve sonraki kelimeye atlanır.
  • Oyunu sonlandırmak için Oyunu Sonlandır düğmesine basın. (Bu işlev, serideki ilk codelab'in başlangıç kodunda yoktur.)

Bu codelab'de, ViewModel nesnesindeki veri bağlamayı LiveData ile entegre ederek GuessTheWord uygulamasını iyileştirirsiniz. Bu, düzendeki görünümler ile ViewModel nesneleri arasındaki iletişimi otomatik hale getirir ve LiveData kullanarak kodunuzu basitleştirmenizi sağlar.

Başlık ekranı

Oyun ekranı

Skor ekranı

Bu görevde bu codelab için başlangıç kodunuzu bulup çalıştırırsınız. Başlangıç kodu olarak önceki codelab'de oluşturduğunuz GuessTheWord uygulamasını kullanabilir veya bir başlangıç uygulaması indirebilirsiniz.

  1. (İsteğe bağlı) Önceki codelab'den aldığınız kodu kullanmıyorsanız bu codelab için başlangıç kodunu indirin. Kodu arşivden çıkarıp projeyi Android Studio'da açın.
  2. Uygulamayı çalıştırıp oyunu oynayın.
  3. Got It (Anladım) düğmesinin bir sonraki kelimeyi gösterdiğini ve puanı bir birim artırdığını unutmayın. Atla düğmesi ise bir sonraki kelimeyi gösterir ve puanı bir birim azaltır. Oyunu Sonlandır düğmesi oyunu bitirir.
  4. Tüm kelimeler arasında gezinin ve uygulamanın puan ekranına otomatik olarak gittiğini fark edin.

Önceki bir codelab'de, GuessTheWord uygulamasında görüntülemelere erişmek için tür açısından güvenli bir yöntem olarak veri bağlamayı kullanıyordunuz. Ancak veri bağlamanın gerçek gücü, adın neyi gösterdiğidir: doğrudan uygulamanızdaki görünüm nesnelerine veri bağlama.

Mevcut uygulama mimarisi

Uygulamanızda, görünümler XML düzeninde tanımlanır ve bu görüntülemelerin verileri, ViewModel nesnelerinde tutulur. Her görüntüleme ile karşılık gelen ViewModel arasında, kullanıcı arayüzü arasında geçiş yapan bir kullanıcı arayüzü denetleyicisi bulunur.

Örneğin:

  • Anladım düğmesi, game_fragment.xml düzen dosyasında Button görünümü olarak tanımlanır.
  • Kullanıcı Anladım düğmesine dokunduğunda, GameFragment parçasındaki bir tıklama dinleyici, GameViewModel içinde ilgili tıklama dinleyiciyi çağırır.
  • Skor GameViewModel'da güncellenir.

Button görünümü ve GameViewModel doğrudan iletişim kuramaz. GameFragment içinde tıklama dinleyiciye ihtiyacı vardır.

ViewModel, veri bağlamaya aktarıldı

Düzendeki görünümlerin, aracı olarak kullanıcı arayüzü denetleyicilerine bağlı kalmadan doğrudan ViewModel nesnelerindeki verilerle iletişim kurması daha kolay olurdu.

ViewModel nesneleri, GuessTheWord uygulamasında tüm kullanıcı arayüzü verilerini tutar. ViewModel nesnesini veri bağlamaya ileterek, görünümler ile ViewModel nesneleri arasındaki iletişimin bir kısmını otomatik hale getirebilirsiniz.

Bu görevde GameViewModel ve ScoreViewModel sınıflarını karşılık gelen XML düzenleriyle ilişkilendirirsiniz. Ayrıca, tıklama etkinliklerini işlemek için işleyici bağlamaları da ayarlayabilirsiniz.

1. Adım: GameViewModel için veri bağlama ekleyin

Bu adımda, GameViewModel öğesini karşılık gelen düzen dosyasıyla (game_fragment.xml) ilişkilendirirsiniz.

  1. game_fragment.xml dosyasına, 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...
  1. GameFragment dosyasında, GameViewModel veri aktarımına aktarın.

    Bunu yapmak için viewModel öğesini önceki adımda beyan ettiğiniz binding.gameViewModel değişkenine atayın. viewModel başlatıldıktan sonra bu kodu onCreateView() içine 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 işleyici bağlamalarını kullanın

Dinleyici bağlamaları onClick(), onZoomIn() veya onZoomOut() gibi etkinlikler tetiklendiğinde çalıştırılan bağlayıcı ifadelerdir. Dinleyici bağlantıları lambda ifadesi olarak yazılır.

Veri bağlama, bir dinleyici 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 Plugin 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 okuyun.

Bu adımda, GameFragment içindeki tıklama dinleyicileri game_fragment.xml dosyasındaki dinleyici bağlamalarıyla değiştirilir.

  1. game_fragment.xml içinde, onClick özelliğini skip_button öğesine ekleyin. Bağlama ifadesi tanımlayın ve GameViewModel içinde onSkip() yöntemini çağırın. Bu bağlama ifadesine dinleyici bağlama denir.
<Button
   android:id="@+id/skip_button"
   ...
   android:onClick="@{() -> gameViewModel.onSkip()}"
   ... />
  1. Benzer şekilde, correct_button tıklama etkinliğini GameViewModel'deki onCorrect() yöntemine bağlayın.
<Button
   android:id="@+id/correct_button"
   ...
   android:onClick="@{() -> gameViewModel.onCorrect()}"
   ... />
  1. end_game_button tıklama etkinliğini GameViewModel'deki onGameFinish() yöntemine bağlayın.
<Button
   android:id="@+id/end_game_button"
   ...
   android:onClick="@{() -> gameViewModel.onGameFinish()}"
   ... />
  1. GameFragment içinde, tıklama işleyicilerini ayarlayan ifadeleri ve tıklama işleyicilerin çağırdığı işlevleri kaldırın. Artık ihtiyacınız yok.

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 karşılık gelen düzen dosyasıyla (score_fragment.xml) ilişkilendirirsiniz.

  1. score_fragment.xml dosyasına, ScoreViewModel türünde bir bağlama değişkeni ekleyin. Bu adım, yukarıdaki GameViewModel işleminize benzer.
<layout ...>
   <data>
       <variable
           name="scoreViewModel"
           type="com.example.android.guesstheword.screens.score.ScoreViewModel" />
   </data>
   <androidx.constraintlayout.widget.ConstraintLayout
  1. score_fragment.xml içinde, onClick özelliğini play_again_button öğesine ekleyin. Bir işleyici bağlama tanımlayın ve ScoreViewModel'da onPlayAgain() yöntemini çağırın.
<Button
   android:id="@+id/play_again_button"
   ...
   android:onClick="@{() -> scoreViewModel.onPlayAgain()}"
   ... />
  1. ScoreFragment içinde, onCreateView() içinde viewModel başlatın. Daha sonra, binding.scoreViewModel bağlama değişkenini başlatın.
viewModel = ...
binding.scoreViewModel = viewModel
  1. ScoreFragment içinde, playAgainButton için tıklama işleyicisini ayarlayan kodu kaldırın. Android Studio bir hata gösteriyorsa projeyi temizleyip yeniden oluşturun.

Kaldırılacak kod:

binding.playAgainButton.setOnClickListener {  viewModel.onPlayAgain()  }
  1. Uygulamanızı çalıştırın. Uygulama daha önce olduğu gibi çalışır ancak artık düğme görünümleri doğrudan ViewModel nesneleriyle iletişim kurar. Görünümler artık ScoreFragment içindeki düğme tıklama işleyicileri üzerinden iletişim kurmuyor.

Veri bağlama hata mesajlarıyla ilgili sorunları giderme

Bir uygulama, veri bağlamayı kullandığında, derleme işlemi, veri bağlama için kullanılan ara sınıflar oluşturur. Bir uygulama, siz derlemeye çalışana kadar Android Studio'nun algılamadığı hatalar içerebilir. Bu nedenle, kodu yazarken uyarı veya kırmızı kod görmezsiniz. Ancak derleme sırasında, oluşturulan ara sınıflardan gelen şifreli hatalar alırsınız.

Şifreli bir hata mesajı alırsanız:

  1. Android Studio Derleme bölmesindeki mesaja dikkatlice bakın. databinding ile biten bir konum görürseniz veri bağlamayla ilgili bir hata var.
  2. 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 var olduğundan emin olun.
  3. XML'nin <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ığını unutmayın:

android:onClick="@{() -> gameViewModel.onCorrectx()}"

Ayrıca, XML dosyasının <data> bölümünde gameViewModel yanlış yazımına dikkat edin:

<data>
   <variable
       name="gameViewModelx"
       type="com.example.android.guesstheword.screens.game.GameViewModel" />
</data>

Android Studio, siz uygulamayı derleyene kadar buna benzer hataları algılamaz ve derleyici 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 uyumludur. ViewModel nesnelerine veri bağlama eklediğinize göre artık LiveData nesnesini dahil etmeye hazırsınız.

Bu görevde, LiveData gözlemcinin yöntemlerini kullanmadan kullanıcı arayüzündeki veriler hakkında bilgi vermek için GuessTheWord uygulamasını veri bağlama kaynağı olarak LiveData kullanacak şekilde değiştirirsiniz.

1. Adım: game_fragment.xml dosyasına LiveData kelimesini ekleyin

Bu adımda, geçerli kelime metin görünümünü doğrudan ViewModel içindeki LiveData nesnesine bağlarsınız.

  1. game_fragment.xml ürününde word_text metin görünümüne android:text özelliğini ekleyin.

Bağlama nesnesini (gameViewModel) kullanarak GameViewModel nesnesinden word olan LiveData nesnesine ayarlayın.

<TextView
   android:id="@+id/word_text"
   ...
   android:text="@{gameViewModel.word}"
   ... />

word.value kullanımınız gerekmediğine dikkat edin. Bunun yerine, gerçek LiveData nesnesini kullanabilirsiniz. LiveData nesnesi, word öğesinin geçerli değerini gösterir. word değeri null ise LiveData nesnesi boş bir dize görüntüler.

  1. GameFragment içinde, onCreateView() öğesinde, gameViewModel başlatıldıktan sonra, binding etkinliğinin yaşam döngüsü sahibi olarak mevcut etkinliği ayarlayın. Bu, yukarıdaki LiveData nesnesinin kapsamını tanımlar. Böylece nesne, game_fragment.xml düzenindeki görünümleri otomatik olarak güncelleyebilir.
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
  1. GameFragment içinde, LiveData word için gözlemleyiciyi kaldırın.

Kaldırılacak kod:

/** Setting up LiveData observation relationship **/
viewModel.word.observe(this, Observer { newWord ->
   binding.wordText.text = newWord
})
  1. Uygulamanızı çalıştırıp oynayın. Mevcut kelime, kullanıcı arayüzü denetleyicisinde gözlemleyici yöntemi olmadan güncellenmektedir.

2. Adım: Score_Data.xml dosyasına puan LiveData ekleyin

Bu adımda, LiveData score öğesini puan parçasındaki puan metni görünümüne bağlarsınız.

  1. score_fragment.xml platformunda, puan metni görünümüne android:text özelliğini ekleyin. text özelliğine scoreViewModel.score atayın. score bir tam sayı olduğundan String.valueOf() kullanarak bunu bir dizeye dönüştürün.
<TextView
   android:id="@+id/score_text"
   ...
   android:text="@{String.valueOf(scoreViewModel.score)}"
   ... />
  1. ScoreFragment içinde, scoreViewModel başladıktan sonra binding değişkeninin yaşam döngüsü sahibi olarak mevcut etkinliği 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
  1. ScoreFragment içinde, score nesnesinin gözlemleyicisini kaldırın.

Kaldırılacak kod:

// Add observer for score
viewModel.score.observe(this, Observer { newScore ->
   binding.scoreText.text = newScore.toString()
})
  1. Uygulamanızı çalıştırıp oynayın. Puan parçasındaki puanın, puan parçasında gözlemleyici olmadan doğru şekilde görüntülendiğini unutmayın.

3. Adım: Veri bağlama ile dize biçimlendirmesi ekleyin

Düzende, veri bağlamayla birlikte dize biçimlendirmesi ekleyebilirsiniz. Bu görevde mevcut kelimeyi, etrafına tırnak işareti ekleyecek şekilde biçimlendirirsiniz. Puan dizesini de aşağıdaki resimde gösterildiği gibi Geçerli Puan'ın önüne eklenecek şekilde biçimlendirebilirsiniz.

  1. string.xml olarak, word ve score metin görüntülemelerini biçimlendirmek için kullanacağınız aşağıdaki dizeleri ekleyin. %s ve %d, geçerli kelimenin ve geçerli puanın yer tutucularıdır.
<string name="quote_format">\"%s\"</string>
<string name="score_format">Current Score: %d</string>
  1. game_fragment.xml içinde, quote_format dize kaynağını kullanmak için word_text metin görünümünün text özelliğini güncelleyin. gameViewModel.word içinde geçin. Bu işlem, geçerli kelimeyi biçimlendirme dizesine bağımsız değişken olarak iletir.
<TextView
   android:id="@+id/word_text"
   ...
   android:text="@{@string/quote_format(gameViewModel.word)}"
   ... />
  1. score metin görünümünü word_text ile benzer şekilde biçimlendirin. game_fragment.xml öğesinde, score_text metin görünümüne text özelliğini ekleyin. %d yer tutucusunun temsil ettiği bir sayısal bağımsız değişken alan dize kaynağını score_format kullanın. Bu biçimlendirme dizesi için bağımsız değişken olarak LiveData nesnesini (score) iletin.
<TextView
   android:id="@+id/score_text"
   ...
   android:text="@{@string/score_format(gameViewModel.score)}"
   ... />
  1. GameFragment sınıfının onCreateView() yöntemindeki score gözlemci kodunu kaldırın.

Kaldırılacak kod:

viewModel.score.observe(this, Observer { newScore ->
   binding.scoreText.text = newScore.toString()
})
  1. Uygulamanızı temizleyin, yeniden oluşturun ve çalıştırın, ardından oyunu oynayın. Geçerli kelimenin ve skorun oyun ekranında biçimlendirildiğini unutmayın.

Tebrikler! LiveData ve ViewModel öğelerini uygulamanıza veri bağlama ile entegre ettiniz. Bu durum, düzeninizdeki görünümlerin, parçada tıklama işleyiciler kullanmadan ViewModel ile doğrudan iletişim kurmasını sağlar. Ayrıca, LiveData gözlemleyici 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 ve LiveData gibi Android Mimari Bileşenleri ile sorunsuz çalışır.
  • Uygulamanızdaki düzenler, Mimari Bileşenlerdeki verilere bağlanabilir. Bu, kullanıcı arayüzü denetleyicisinin yaşam döngüsünü yönetmenize ve verilerdeki değişiklikler hakkında zaten bilgi edinmenize yardımcı olur.

ViewModel veri bağlama

  • Veri bağlamayı kullanarak bir ViewModel öğesini bir düzenle ilişkilendirebilirsiniz.
  • Kullanıcı arayüzü verileri ViewModel nesnelerinde tutulur. ViewModel nesnelerini veri bağlamaya ileterek, görünümler ile ViewModel nesneleri arasındaki iletişimin bir kısmını otomatik hale getirebilirsiniz.

ViewModel öğesini bir 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 veri aktarımına geçirin.
binding.gameViewModel = viewModel

Dinleyici bağlamaları

  • Dinleyici bağlamaları, onClick() gibi tıklama etkinlikleri tetiklendiğinde düzenlenen çalışan bağlı ifadelerdir.
  • Dinleyici bağlantıları lambda ifadesi olarak yazılır.
  • Dinleyici bağlamalarını kullanarak, kullanıcı arayüzü denetleyicilerindeki tıklama dinleyicileri düzen dosyasındaki dinleyici bağlamalarıyla değiştirilir.
  • Veri bağlama, bir dinleyici 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çindeki LiveData nesnesine bağlayabilirsiniz. ViewModel içindeki LiveData değiştiğinde, düzendeki görünümler, kullanıcı arayüzü denetleyicilerindeki gözlemleyici 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ü denetleyicisindeki binding değişkeninin yaşam döngüsü sahibi olarak ayarlayın.
binding.lifecycleOwner = this

Veri bağlama ile dize biçimlendirmesi

  • Veri bağlamayı kullanarak bir dize kaynağını dizeler için %s ve tam sayılar için %d gibi yer tutucularla biçimlendirebilirsiniz.
  • Görünümün text özelliğini güncellemek için LiveData nesnesini, biçimlendirme dizesinin bağımsız değişkeni olarak iletin.
 android:text="@{@string/quote_format(gameViewModel.word)}"

Udacity kursu:

Android geliştirici dokümanları:

Bu bölümde, bir eğitmen tarafından sunulan kurs kapsamında bu codelab üzerinden çalışan öğrenciler için olası ev ödevi ödevleri listelenmektedir. Öğretmenin şunları yapması gerekir:

  • Gerekirse ev ödevini atayın.
  • Öğrencilere ev ödevlerinin nasıl gönderileceğini bildirin.
  • Ev ödevlerine not verin.

Öğretmenler bu önerileri istedikleri kadar kullanabilir veya uygun görebilir ve uygun olan diğer ev ödevlerini atayabilirler.

Bu codelab'de kendiniz çalışıyorsanız, bilginizi test etmek için bu ödevlerden yararlanabilirsiniz.

Bu soruları yanıtlayın

1. Soru

Dinleyici bağlantıları hakkında aşağıdaki ifadelerden hangisi doğru değildir?

  • Dinleyici bağlamaları, bir etkinlik gerçekleştiğinde çalıştırılan bağlayıcı ifadelerdir.
  • Dinleyici bağlamalar, Android Gradle eklentisinin tüm sürümleriyle çalışır.
  • Dinleyici bağlantıları lambda ifadesi olarak yazılır.
  • Dinleyici bağlantıları, yöntem referanslarına benzer ancak rastgele veri bağlama ifadeleri çalıştırmanızı sağlar.

2. Soru

Uygulamanızın bu dize kaynağını içerdiğini varsayalım:
<string name="generic_name">Hello %s</string>

Veri bağlama ifadesi kullanılarak dizenin biçimlendirilmesi için doğru söz dizimi aşağıdakilerden hangisidir?

  • 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

Bir işleyici bağlama ifadesi 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 tarafından yeniden oluşturulduğunda
  • onClick() gibi bir etkinlik gerçekleştiğinde
  • Etkinlik arka plana geçtiğinde

Sonraki derse başlayın: 5.4: LiveData dönüşümleri

Bu kurstaki diğer codelab'lerin bağlantılarına ulaşmak için Android Kotlin Fundamentals codelabs açılış sayfasına göz atın.