Android Kotlin Hakkında Temel Bilgiler 07.4: RecyclerView öğeleriyle etkileşim kurma

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ş

Öğeleri görüntüleyen listeler ve ızgaralar kullanan çoğu uygulama, kullanıcıların öğelerle etkileşimde bulunmasına olanak tanır. Bir listeden bir öğeye dokunup öğenin ayrıntılarını görmek, bu tür etkileşimlerin çok yaygın bir kullanım alanıdır. Bunu yapmak için, kullanıcıların öğelere dokunmasına yanıt olarak ayrıntı görünümü gösteren tıklama işleyicileri ekleyebilirsiniz.

Bu codelab'de, önceki codelab serisindeki uyku izleyici uygulamasının genişletilmiş bir sürümünü temel alarak RecyclerView etkileşim ekleyeceksiniz.

Bilmeniz gerekenler

  • Etkinlik, parçalar ve görünümler kullanarak temel bir kullanıcı arayüzü oluşturma.
  • Parçalar arasında gezinme ve parçalar arasında veri aktarmak için safeArgs kullanma.
  • Modelleri, model fabrikalarını, dönüşümleri ve LiveData ile gözlemcilerini görüntüleyin.
  • Room veritabanı oluşturma, veri erişim nesnesi (DAO) oluşturma ve varlıkları tanımlama
  • Veritabanı ve diğer uzun süren görevler için eş yordamları kullanma
  • Adapter, ViewHolder ve öğe düzeniyle temel bir RecyclerView nasıl uygulanır?
  • RecyclerView için veri bağlama nasıl uygulanır?
  • Verileri dönüştürmek için bağlama adaptörleri oluşturma ve kullanma
  • GridLayoutManager nasıl kullanılır?

Neler öğreneceksiniz?

  • RecyclerView içindeki öğeleri tıklanabilir hale getirme Bir öğe tıklandığında ayrıntı görünümüne gitmek için bir tıklama işleyici uygulayın.

Yapacaklarınız

  • Bu serideki önceki codelab'de yer alan TrackMySleepQuality uygulamasının genişletilmiş bir sürümünü temel alın.
  • Listenize bir tıklama işleyici ekleyin ve kullanıcı etkileşimini dinlemeye başlayın. Bir liste öğesine dokunulduğunda, tıklanan öğeyle ilgili ayrıntıların bulunduğu bir parçaya yönlendirme tetiklenir. Başlangıç kodu, ayrıntı parçası ve gezinme kodu için kod sağlar.

Başlangıçtaki uyku izleme uygulamasında, aşağıdaki şekilde gösterildiği gibi parçalarla temsil edilen iki ekran bulunur.

Solda gösterilen ilk ekranda izlemeyi başlatma ve durdurma düğmeleri bulunur. Ekranda kullanıcının uyku verilerinden bazıları gösterilir. Temizle düğmesi, uygulamanın kullanıcı için topladığı tüm verileri kalıcı olarak siler. Sağda gösterilen ikinci ekranda uyku kalitesi derecesi seçilir.

Bu uygulama, uyku verilerini kalıcı hale getirmek için kullanıcı arayüzü denetleyicisi, görünüm modeli ve LiveData ile Room veritabanı içeren basitleştirilmiş bir mimari kullanır.

Bu codelab'de, kullanıcı ızgaradaki bir öğeye dokunduğunda yanıt verme özelliği ekleyeceksiniz. Bu özellik, aşağıdaki gibi bir ayrıntı ekranı açar. Bu ekranın kodu (parça, görünüm modeli ve gezinme) başlangıç uygulamasıyla birlikte sağlanır ve tıklama işleme mekanizmasını siz uygularsınız.

1. adım: Başlangıç uygulamasını edinin

  1. GitHub'dan RecyclerViewClickHandler-Starter kodunu indirin ve projeyi Android Studio'da açın.
  2. Başlangıç seviyesindeki uyku takipçisi uygulamasını derleyip çalıştırın.

[İsteğe bağlı] Önceki codelab'deki uygulamayı kullanmak istiyorsanız uygulamanızı güncelleyin.

Bu codelab için GitHub'da sağlanan başlangıç uygulamasından çalışacaksanız bir sonraki adıma geçin.

Önceki codelab'de oluşturduğunuz kendi uyku takip uygulamayı kullanmaya devam etmek istiyorsanız mevcut uygulamanızı ayrıntılar ekranı parçası kodunu içerecek şekilde güncellemek için aşağıdaki talimatları uygulayın.

  1. Mevcut uygulamanızla devam etseniz bile dosyaları kopyalayabilmek için GitHub'dan RecyclerViewClickHandler-Starter kodunu alın.
  2. sleepdetail paketindeki tüm dosyaları kopyalayın.
  3. layout klasöründe fragment_sleep_detail.xml dosyasını kopyalayın.
  4. navigation.xml kapsayıcısının güncellenen içeriklerini kopyalayın. Bu içerikler, sleep_detail_fragment için gezinme özelliğini ekler.
  5. database paketindeki SleepDatabaseDao bölümüne yeni getNightWithId() yöntemini ekleyin:
/**
 * Selects and returns the night with given nightId.
*/
@Query("SELECT * from daily_sleep_quality_table WHERE nightId = :key")
fun getNightWithId(key: Long): LiveData<SleepNight>
  1. res/values/strings bölümüne aşağıdaki dize kaynağını ekleyin:
<string name="close">Close</string>
  1. Veri bağlamayı güncellemek için uygulamanızı temizleyip yeniden oluşturun.

2. adım: Uyku ayrıntıları ekranının kodunu inceleyin

Bu codelab'de, tıklanan uyku gecesiyle ilgili ayrıntıları gösteren bir parçaya giden bir tıklama işleyici uygulayacaksınız. Başlangıç kodunuzda, bu SleepDetailFragment için zaten bir parça ve gezinme grafiği var. Bunun nedeni, kodun oldukça uzun olması ve parçalar ile gezinmenin bu codelab'in bir parçası olmamasıdır. Aşağıdaki kod hakkında bilgi edinin:

  1. Uygulamanızda sleepdetail paketini bulun. Bu paket, bir gecelik uykuyla ilgili ayrıntıları gösteren bir parça için parçayı, görünüm modelini ve görünüm modeli fabrikasını içerir.

  2. sleepdetail paketinde, SleepDetailViewModel kodunu açıp inceleyin. Bu görünüm modeli, oluşturucuda SleepNight ve DAO için anahtarı alır.

    Sınıfın gövdesinde, belirli bir anahtar için SleepNight değerini alan kod ve Kapat düğmesine basıldığında SleepTrackerFragment'ye geri dönüşü kontrol eden navigateToSleepTracker değişkeni bulunur.

    getNightWithId() işlevi LiveData<SleepNight> değerini döndürür ve SleepDatabaseDao içinde tanımlanır (database paketinde).

  3. sleepdetail paketinde, SleepDetailFragment kodunu açıp inceleyin. Veri bağlama, görünüm modeli ve gezinme için gözlemci kurulumuna dikkat edin.

  4. sleepdetail paketinde, SleepDetailViewModelFactory için kodu açın ve inceleyin.

  5. Düzen klasöründe fragment_sleep_detail.xml öğesini inceleyin. Görünüm modelinden her görünümde gösterilecek verileri almak için <data> etiketinde tanımlanan sleepDetailViewModel değişkenine dikkat edin.

    Düzende, uyku kalitesi için ImageView içeren bir ConstraintLayout, kalite derecesi için bir TextView, uyku süresi için bir TextView ve ayrıntı parçasını kapatmak için bir Button bulunur.

  6. navigation.xml dosyasını açın. sleep_tracker_fragment için sleep_detail_fragment ile ilgili yeni işleme dikkat edin.

    Yeni işlem olan action_sleep_tracker_fragment_to_sleepDetailFragment, uyku izleyici parçasından ayrıntılar ekranına yapılan gezinmedir.

Bu görevde, kullanıcının dokunma işlemine yanıt vermek için RecyclerView öğesini güncelleyerek dokunulan öğenin ayrıntılar ekranını gösterirsiniz.

Tıklamaları almak ve işlemek iki kısımdan oluşan bir görevdir: Öncelikle tıklamayı dinleyip almanız ve hangi öğenin tıklandığını belirlemeniz gerekir. Ardından, tıklamayı bir işlemle yanıtlamanız gerekir.

Peki bu uygulama için tıklama dinleyici eklemek üzere en uygun yer neresidir?

  • SleepTrackerFragment birçok görünümü barındırır. Bu nedenle, tıklama etkinliklerini parça düzeyinde dinlemek hangi öğenin tıklandığını söylemez. Tıklanan öğenin, tıklanan öğe mi yoksa diğer kullanıcı arayüzü öğelerinden biri mi olduğunu bile söylemez.
  • RecyclerView düzeyinde dinleme yapıldığında, kullanıcının listede tam olarak hangi öğeyi tıkladığını anlamak zordur.
  • Tıklanan bir öğe hakkında bilgi edinmek için en iyi hız, bir liste öğesini temsil ettiğinden ViewHolder nesnesindedir.

ViewHolder, tıklamaları dinlemek için harika bir yer olsa da genellikle bunları işlemek için doğru yer değildir. Peki, tıklamaları işlemek için en iyi yer neresidir?

  • Adapter, görünümlerdeki veri öğelerini gösterir. Bu nedenle, tıklamaları bağdaştırıcıda işleyebilirsiniz. Ancak bağdaştırıcının görevi, verileri görüntülenmeye uygun hale getirmektir, uygulama mantığıyla ilgilenmek değildir.
  • Tıklamaları genellikle ViewModel içinde ele almanız gerekir. Bunun nedeni, ViewModel'nın tıklamaya yanıt olarak ne yapılması gerektiğini belirlemeye yönelik verilere ve mantığa erişebilmesidir.

1. adım: Tıklama işleyici oluşturun ve öğe düzeninden tetikleyin

  1. sleeptracker klasöründe SleepNightAdapter.kt dosyasını açın.
  2. Dosyanın sonunda, en üst düzeyde yeni bir dinleyici sınıfı (SleepNightListener) oluşturun.
class SleepNightListener() {
    
}
  1. SleepNightListener sınıfının içine bir onClick() işlevi ekleyin. Bir liste öğesini görüntüleyen görünüm tıklandığında, görünüm bu onClick() işlevini çağırır. (Görünümün android:onClick özelliğini daha sonra bu işlev için ayarlayacaksınız.)
class SleepNightListener() {
    fun onClick() = 
}
  1. onClick()'ye night türünde SleepNight bir işlev bağımsız değişkeni ekleyin. Görünüm, hangi öğeyi gösterdiğini bilir ve tıklamanın işlenmesi için bu bilginin aktarılması gerekir.
class SleepNightListener() {
    fun onClick(night: SleepNight) = 
}
  1. onClick() işlevinin ne yapacağını tanımlamak için SleepNightListener oluşturucusunda bir clickListener geri çağırma işlevi sağlayın ve bunu onClick() işlevine atayın.

    Tıklamayı işleyen lambda'ya clickListener adını vermek, sınıflar arasında geçirilirken izlenmesine yardımcı olur. clickListener geri çağırma işlevinin, veritabanındaki verilere erişmek için yalnızca night.nightId'ye ihtiyacı vardır. Tamamlanmış SleepNightListener sınıfınız aşağıdaki koda benzemelidir.
class SleepNightListener(val clickListener: (sleepId: Long) -> Unit) {
   fun onClick(night: SleepNight) = clickListener(night.nightId)
}
  1. list_item_sleep_night.xml. dosyasını açın.
  2. data bloğunun içine, SleepNightListener sınıfını veri bağlama yoluyla kullanılabilir hale getirmek için yeni bir değişken ekleyin. Yeni <variable> öğesine name clickListener. verin. type öğesini, aşağıda gösterildiği gibi com.example.android.trackmysleepquality.sleeptracker.SleepNightListener sınıfının tam nitelikli adı olarak ayarlayın. Artık bu düzenden SleepNightListener'teki onClick() işlevine erişebilirsiniz.
<variable
            name="clickListener"
            type="com.example.android.trackmysleepquality.sleeptracker.SleepNightListener" />
  1. Bu liste öğesinin herhangi bir bölümündeki tıklamaları dinlemek için android:onClick özelliğini ConstraintLayout öğesine ekleyin.

    Aşağıda gösterildiği gibi, veri bağlama lambda'sı kullanarak özelliği clickListener:onClick(sleep) olarak ayarlayın:
android:onClick="@{() -> clickListener.onClick(sleep)}"

2. adım: Tıklama işleyicisini görünüm tutucuya ve bağlama nesnesine iletin

  1. SleepNightAdapter.kt dosyasını açın.
  2. SleepNightAdapter sınıfının oluşturucusunu val clickListener: SleepNightListener alacak şekilde değiştirin. Adaptör ViewHolder öğesini bağladığında bu tıklama işleyicisini sağlaması gerekir.
class SleepNightAdapter(val clickListener: SleepNightListener):
       ListAdapter<SleepNight, SleepNightAdapter.ViewHolder>(SleepNightDiffCallback()) {
  1. onBindViewHolder() içinde, tıklama işleyicisini ViewHolder'ye de iletmek için çağrıyı holder.bind() olarak güncelleyin. İşlev çağrısına parametre eklediğiniz için derleyici hatası alırsınız.
holder.bind(getItem(position)!!, clickListener)
  1. clickListener parametresini bind() öğesine ekleyin. Bunu yapmak için imleci hatanın üzerine getirin ve aşağıdaki ekran görüntüsünde gösterildiği gibi hataya Alt+Enter (Windows) veya Option+Enter (Mac) tuşuna basın.

  1. ViewHolder sınıfının içindeki bind() işlevinde, tıklama işleyiciyi binding nesnesine atayın. Bağlama nesnesini güncellemeniz gerektiği için hata mesajı gösterilir.
binding.clickListener = clickListener
  1. Veri bağlamayı güncellemek için projenizi Temizleyin ve Yeniden Oluşturun. (Önbellekleri de geçersiz kılmanız gerekebilir.) Bu nedenle, bağdaştırıcı oluşturucusundan bir tıklama dinleyicisi aldınız ve bunu görünüm tutucusuna ve bağlama nesnesine kadar ilettiniz.

3. adım: Bir öğeye dokunulduğunda kısa mesaj gösterme

Artık tıklamayı yakalamak için kodunuz var ancak bir liste öğesine dokunulduğunda ne olacağını uygulamadınız. En basit yanıt, bir öğe tıklandığında nightId gösteren bir bildirim göstermektir. Bu, bir liste öğesi tıklandığında doğru nightId değerinin yakalanıp iletildiğini doğrular.

  1. SleepTrackerFragment.kt dosyasını açın.
  2. onCreateView() bölümünde adapter değişkenini bulun. Artık bir tıklama işleyici parametresi beklediği için hata gösterdiğini unutmayın.
  3. SleepNightAdapter öğesine bir lambda ileterek tıklama işleyici tanımlayın. Bu basit lambda, aşağıda gösterildiği gibi nightId simgesini gösteren bir durum mesajı görüntüler. Toast dosyasını içe aktarmanız gerekir. Güncellenen tanımın tamamını aşağıda bulabilirsiniz.
val adapter = SleepNightAdapter(SleepNightListener { nightId ->
   Toast.makeText(context, "${nightId}", Toast.LENGTH_LONG).show()
})
  1. Uygulamayı çalıştırın, öğelere dokunun ve doğru nightId ile bir bildirim gösterdiklerini doğrulayın. Öğelerin nightId değerleri arttığı ve uygulama en son geceyi ilk olarak gösterdiği için en düşük nightId değerine sahip öğe listenin en altında yer alır.

Bu görevde, RecyclerView içindeki bir öğe tıklandığında gösterilen davranışı değiştirerek uygulamanın, pop-up göstermek yerine tıklanan gece hakkında daha fazla bilgi gösteren bir ayrıntı parçasına gitmesini sağlayacaksınız.

1. adım: Tıklama ile gezinme

Bu adımda, yalnızca bir toast göstermek yerine SleepTrackerFragment öğesinin onCreateView() bölümündeki tıklama işleyici lambdasını, nightId öğesini SleepTrackerViewModel öğesine iletecek ve SleepDetailFragment öğesine gitmeyi tetikleyecek şekilde değiştirirsiniz.

Tıklama işleyici işlevini tanımlayın:

  1. SleepTrackerViewModel.kt dosyasını açın.
  2. SleepTrackerViewModel içinde, sona doğru onSleepNightClicked()click handler işlevini tanımlayın.
fun onSleepNightClicked(id: Long) {

}
  1. onSleepNightClicked() içinde, tıklanan uyku gecesinin id değerini iletilen _navigateToSleepDetail değerine ayarlayarak gezinmeyi tetikleyin.
fun onSleepNightClicked(id: Long) {
   _navigateToSleepDetail.value = id
}
  1. _navigateToSleepDetail'yi uygulama. Daha önce yaptığınız gibi, gezinme durumu için bir private MutableLiveData tanımlayın. Ve bununla birlikte herkese açık bir gettable val.
private val _navigateToSleepDetail = MutableLiveData<Long>()
val navigateToSleepDetail
   get() = _navigateToSleepDetail
  1. Uygulama gezinmeyi tamamladıktan sonra çağrılacak yöntemi tanımlayın. Bu parametreyi onSleepDetailNavigated() olarak adlandırın ve değerini null olarak ayarlayın.
fun onSleepDetailNavigated() {
    _navigateToSleepDetail.value = null
}

Tıklama işleyicisini çağırmak için kodu ekleyin:

  1. SleepTrackerFragment.kt dosyasını açın ve uyarlayıcıyı oluşturan ve SleepNightListener tanımlayan koda giderek bir toast göstermek için aşağı kaydırın.
val adapter = SleepNightAdapter(SleepNightListener { nightId ->
   Toast.makeText(context, "${nightId}", Toast.LENGTH_LONG).show()
})
  1. Bir öğeye dokunulduğunda sleepTrackerViewModel içinde bir tıklama işleyicisini, onSleepNighClicked(), çağırmak için aşağıdaki kodu kısa mesajın altına ekleyin. nightId değerini iletin. Böylece görünüm modeli, hangi uyku gecesinin alınacağını bilir. onSleepNightClicked() henüz tanımlamadığınız için bu işlem hata verir. İsterseniz bildirimi saklayabilir, yorum olarak işaretleyebilir veya silebilirsiniz.
sleepTrackerViewModel.onSleepNightClicked(nightId)

Tıklamaları gözlemlemek için kodu ekleyin:

  1. SleepTrackerFragment.kt dosyasını açın.
  2. onCreateView() içinde, manager bildiriminin hemen üstüne, yeni navigateToSleepDetail LiveData'yi gözlemlemek için kod ekleyin. navigateToSleepDetail değiştiğinde SleepDetailFragment'ye gidin, night'yi iletin ve ardından onSleepDetailNavigated()'ü çağırın. Bunu daha önce bir codelab 'de yaptığınız için kod aşağıda verilmiştir:
sleepTrackerViewModel.navigateToSleepDetail.observe(this, Observer { night ->
            night?.let {
              this.findNavController().navigate(
                        SleepTrackerFragmentDirections
                                .actionSleepTrackerFragmentToSleepDetailFragment(night))
               sleepTrackerViewModel.onSleepDetailNavigated()
            }
        })
  1. Kodunuzu çalıştırın, bir öğeyi tıklayın ve uygulama çöker.

Bağlama bağdaştırıcılarındaki boş değerleri işleme:

  1. Uygulamayı hata ayıklama modunda tekrar çalıştırın. Bir öğeye dokunun ve günlükleri hataları gösterecek şekilde filtreleyin. Aşağıdakine benzer bir ifade içeren bir yığın izi gösterilir.
Caused by: java.lang.IllegalArgumentException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter item

Maalesef yığın izleme, bu hatanın nerede tetiklendiğini açıkça göstermiyor. Veri bağlamanın bir dezavantajı, kodunuzda hata ayıklamayı zorlaştırabilmesidir. Bir öğeyi tıkladığınızda uygulama kilitleniyor ve tek yeni kod, tıklamayı işlemek için kullanılıyor.

Ancak bu yeni tıklama işleme mekanizmasıyla birlikte, bağlama bağdaştırıcılarının artık item için null değeriyle çağrılması mümkün. Özellikle uygulama başladığında LiveData, null olarak başlar. Bu nedenle, her bağdaştırıcıya null kontrolleri eklemeniz gerekir.

  1. BindingUtils.kt içinde, her bağlama bağdaştırıcısı için item bağımsız değişkeninin türünü null yapılabilir olarak değiştirin ve gövdeyi item?.let{...} ile sarmalayın. Örneğin, sleepQualityString için adaptörünüz şu şekilde görünür. Diğer bağdaştırıcıları da aynı şekilde değiştirin.
@BindingAdapter("sleepQualityString")
fun TextView.setSleepQualityString(item: SleepNight?) {
   item?.let {
       text = convertNumericQualityToString(item.sleepQuality, context.resources)
   }
}
  1. Uygulamanızı çalıştırın. Bir öğeye dokunduğunuzda ayrıntı görünümü açılır.

Android Studio projesi: RecyclerViewClickHandler.

RecyclerView içindeki öğelerin tıklamalara yanıt vermesini sağlamak için ViewHolder içindeki liste öğelerine tıklama dinleyicileri ekleyin ve tıklamaları ViewModel içinde işleyin.

RecyclerView içindeki öğelerin tıklamalara yanıt vermesi için şunları yapmanız gerekir:

  • Lambda alan ve bunu bir onClick() işlevine atayan bir işleyici sınıfı oluşturun.
class SleepNightListener(val clickListener: (sleepId: Long) -> Unit) {
   fun onClick(night: SleepNight) = clickListener(night.nightId)
}
  • Görünümde tıklama işleyicisini ayarlayın.
android:onClick="@{() -> clickListener.onClick(sleep)}"
  • Tıklama işleyicisini bağdaştırıcı oluşturucusuna, görünüm tutucusuna iletin ve bağlama nesnesine ekleyin.
class SleepNightAdapter(val clickListener: SleepNightListener):
       ListAdapter<DataItem, RecyclerView.ViewHolder>(SleepNightDiffCallback()
holder.bind(getItem(position)!!, clickListener)
binding.clickListener = clickListener
  • Geri dönüşüm görünümünü gösteren ve bağdaştırıcıyı oluşturduğunuz parçada, bağdaştırıcıya bir lambda ileterek tıklama işleyicisi tanımlayın.
val adapter = SleepNightAdapter(SleepNightListener { nightId ->
      sleepTrackerViewModel.onSleepNightClicked(nightId)
})
  • Tıklama işleyicisini görünüm modelinde uygulayın. Liste öğelerinin tıklanması genellikle ayrıntı parçasına yönlendirmeyi tetikler.

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

Uygulamanızın, alışveriş listesindeki öğeleri gösteren bir RecyclerView içerdiğini varsayalım. Uygulamanız ayrıca bir tıklama dinleyici sınıfı tanımlar:

class ShoppingListItemListener(val clickListener: (itemId: Long) -> Unit) {
    fun onClick(cartItem: CartItem) = clickListener(cartItem.itemId)
}

ShoppingListItemListener öğesini veri bağlama için nasıl kullanılabilir hale getirirsiniz? Birini seçin.

▢ Alışveriş listesini gösteren RecyclerView öğesini içeren düzen dosyasına ShoppingListItemListener için bir <data> değişkeni ekleyin.

▢ Alışveriş listesindeki tek bir satırın düzenini tanımlayan düzen dosyasına, ShoppingListItemListener için bir <data> değişkeni ekleyin.

ShoppingListItemListener sınıfına veri bağlamayı etkinleştirecek bir işlev ekleyin:

fun onBinding (cartItem: CartItem) {dataBindingEnable(true)}

ShoppingListItemListener sınıfında, onClick() işlevinin içine veri bağlamayı etkinleştirmek için bir çağrı ekleyin:

fun onClick(cartItem: CartItem) = { 
    clickListener(cartItem.itemId)
    dataBindingEnable(true)
}

2. Soru

android:onClick özelliğini, RecyclerView içindeki öğelerin tıklamalara yanıt vermesi için nereye eklersiniz? Uygun olan tüm seçenekleri işaretleyin.

RecyclerView öğesini gösteren düzen dosyasında, RecyclerView öğesini <androidx.recyclerview.widget.RecyclerView> öğesine ekleyin.

▢ Satırdaki bir öğenin düzen dosyasına ekleyin. Öğenin tamamının tıklanabilir olmasını istiyorsanız öğeyi satırdaki öğeleri içeren üst görünüme ekleyin.

▢ Satırdaki bir öğenin düzen dosyasına ekleyin. Öğede tek bir TextView öğesinin tıklanabilir olmasını istiyorsanız bunu <TextView> öğesine ekleyin.

▢ Her zaman MainActivity için düzen dosyasına ekleyin.

Sonraki derse başlayın: 7.5: RecyclerView'da başlıklar