Android Kotlin Hakkında Temel Bilgiler 05.3: ViewModel ve LiveData ile veri bağlama

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 kullanarak ViewModel içinde veri depolama
  • LiveData 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 etme
  • LiveData 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ümlerin ViewModel nesneleriyle doğrudan iletişim kurabilmesi için uygulamanın görünümlerini ViewModel nesnelerine bağlıyorsunuz.
  • Uygulamayı, veri bağlama kaynağı olarak LiveData'yı kullanacak şekilde değiştirirsiniz. Bu değişiklikten sonra LiveData nesneleri, verilerdeki değişiklikler hakkında kullanıcı arayüzünü bilgilendirir ve LiveData 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.

  1. (İ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.
  2. Uygulamayı çalıştırın ve oyunu oynayın.
  3. 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.
  4. 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ı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 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.

  1. 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...
  1. GameFragment dosyasında, GameViewModel öğesini veri bağlamaya iletin.

    Bunu yapmak için önceki adımda bildirdiğiniz binding.gameViewModel değişkenine viewModel değerini atayın. Bu kodu onCreateView() 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.

  1. game_fragment.xml içinde skip_button öğesine onClick özelliğini ekleyin. Bir bağlama ifadesi tanımlayın ve GameViewModel içinde onSkip() yöntemini çağırın. Bu bağlama ifadesine dinleyici bağlama adı verilir.
<Button
   android:id="@+id/skip_button"
   ...
   android:onClick="@{() -> gameViewModel.onSkip()}"
   ... />
  1. Benzer şekilde, correct_button öğesinin tıklama etkinliğini GameViewModel içindeki onCorrect() yöntemine bağlayın.
<Button
   android:id="@+id/correct_button"
   ...
   android:onClick="@{() -> gameViewModel.onCorrect()}"
   ... />
  1. end_game_button öğesinin tıklama etkinliğini GameViewModel içindeki onGameFinish() yöntemine bağlayın.
<Button
   android:id="@+id/end_game_button"
   ...
   android:onClick="@{() -> gameViewModel.onGameFinish()}"
   ... />
  1. 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.

  1. score_fragment.xml dosyasında ScoreViewModel türünde bir bağlama değişkeni ekleyin. Bu adım, yukarıdaki GameViewModel 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
  1. score_fragment.xml içinde play_again_button öğesine onClick özelliğini ekleyin. Bir işleyici bağlaması tanımlayın ve ScoreViewModel içinde onPlayAgain() yöntemini çağırın.
<Button
   android:id="@+id/play_again_button"
   ...
   android:onClick="@{() -> scoreViewModel.onPlayAgain()}"
   ... />
  1. ScoreFragment içinde, onCreateView() klasöründe viewModel öğesini başlatın. Ardından binding.scoreViewModel bağlama değişkenini başlatın.
viewModel = ...
binding.scoreViewModel = viewModel
  1. 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()  }
  1. 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ık ScoreFragment 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:

  1. 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.
  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 bu işlevin mevcut olduğundan emin olun.
  3. 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.

  1. game_fragment.xml içinde word_text metin görünümüne android: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.

  1. GameFragment içinde, onCreateView() içinde, gameViewModel başlatıldıktan sonra mevcut etkinliği binding değişkeninin yaşam döngüsü sahibi olarak ayarlayın. Bu, yukarıdaki LiveData nesnesinin kapsamını tanımlar ve nesnenin düzen game_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
  1. 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
})
  1. 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.

  1. score_fragment.xml içinde, android:text özelliğini puan metni görünümüne ekleyin. scoreViewModel.score değerini text özelliğine atayın. score bir tamsayı olduğundan String.valueOf() kullanarak dizeye dönüştürün.
<TextView
   android:id="@+id/score_text"
   ...
   android:text="@{String.valueOf(scoreViewModel.score)}"
   ... />
  1. ScoreFragment içinde, scoreViewModel başlatıldıktan sonra mevcut etkinliği binding 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
  1. 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()
})
  1. 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.

  1. string.xml içinde, word ve score 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>
  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 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)}"
   ... />
  1. 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üne text özelliğini ekleyin. %d yer tutucusuyla gösterilen sayısal bir bağımsız değişken alan score_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)}"
   ... />
  1. GameFragment sınıfında, onCreateView() yönteminin içindeki 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. 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 ve LiveData 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ğlamaya ViewModel nesneleri ileterek görünümler ve ViewModel 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ç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ö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ü denetleyicisindeki binding 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çin LiveData 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: 5.4: LiveData dönüşümleri

Bu kurstaki diğer codelab'lerin bağlantılarını Android Kotlin Hakkında Temel Bilgiler codelab'leri açılış sayfasında bulabilirsiniz.