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
safeArgskullanma. - Modelleri, model fabrikalarını, dönüşümleri ve
LiveDataile gözlemcilerini görüntüleyin. Roomveritabanı 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,ViewHolderve öğe düzeniyle temel birRecyclerViewnasıl uygulanır?RecyclerViewiçin veri bağlama nasıl uygulanır?- Verileri dönüştürmek için bağlama adaptörleri oluşturma ve kullanma
GridLayoutManagernasıl kullanılır?
Neler öğreneceksiniz?
RecyclerViewiç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
- GitHub'dan RecyclerViewClickHandler-Starter kodunu indirin ve projeyi Android Studio'da açın.
- 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.
- Mevcut uygulamanızla devam etseniz bile dosyaları kopyalayabilmek için GitHub'dan RecyclerViewClickHandler-Starter kodunu alın.
sleepdetailpaketindeki tüm dosyaları kopyalayın.layoutklasöründefragment_sleep_detail.xmldosyasını kopyalayın.navigation.xmlkapsayıcısının güncellenen içeriklerini kopyalayın. Bu içerikler,sleep_detail_fragmentiçin gezinme özelliğini ekler.databasepaketindekiSleepDatabaseDaobölümüne yenigetNightWithId()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>res/values/stringsbölümüne aşağıdaki dize kaynağını ekleyin:
<string name="close">Close</string>- 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:
- Uygulamanızda
sleepdetailpaketini 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. sleepdetailpaketinde,SleepDetailViewModelkodunu açıp inceleyin. Bu görünüm modeli, oluşturucudaSleepNightve DAO için anahtarı alır.
Sınıfın gövdesinde, belirli bir anahtar içinSleepNightdeğerini alan kod ve Kapat düğmesine basıldığındaSleepTrackerFragment'ye geri dönüşü kontrol edennavigateToSleepTrackerdeğişkeni bulunur.
getNightWithId()işleviLiveData<SleepNight>değerini döndürür veSleepDatabaseDaoiçinde tanımlanır (databasepaketinde).sleepdetailpaketinde,SleepDetailFragmentkodunu açıp inceleyin. Veri bağlama, görünüm modeli ve gezinme için gözlemci kurulumuna dikkat edin.sleepdetailpaketinde,SleepDetailViewModelFactoryiçin kodu açın ve inceleyin.- 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ımlanansleepDetailViewModeldeğişkenine dikkat edin.
Düzende, uyku kalitesi içinImageViewiçeren birConstraintLayout, kalite derecesi için birTextView, uyku süresi için birTextViewve ayrıntı parçasını kapatmak için birButtonbulunur. navigation.xmldosyasını açın.sleep_tracker_fragmentiçinsleep_detail_fragmentile ilgili yeni işleme dikkat edin.
Yeni işlem olanaction_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?
SleepTrackerFragmentbirç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.RecyclerViewdü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
ViewHoldernesnesindedir.
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
ViewModeliç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
sleeptrackerklasöründe SleepNightAdapter.kt dosyasını açın.- Dosyanın sonunda, en üst düzeyde yeni bir dinleyici sınıfı (
SleepNightListener) oluşturun.
class SleepNightListener() {
}SleepNightListenersınıfının içine bironClick()işlevi ekleyin. Bir liste öğesini görüntüleyen görünüm tıklandığında, görünüm buonClick()işlevini çağırır. (Görünümünandroid:onClicközelliğini daha sonra bu işlev için ayarlayacaksınız.)
class SleepNightListener() {
fun onClick() =
}onClick()'yenighttüründeSleepNightbir 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) =
}onClick()işlevinin ne yapacağını tanımlamak içinSleepNightListeneroluşturucusunda birclickListenergeri çağırma işlevi sağlayın ve bunuonClick()işlevine atayın.
Tıklamayı işleyen lambda'yaclickListeneradını vermek, sınıflar arasında geçirilirken izlenmesine yardımcı olur.clickListenergeri çağırma işlevinin, veritabanındaki verilere erişmek için yalnızcanight.nightId'ye ihtiyacı vardır. TamamlanmışSleepNightListenersınıfınız aşağıdaki koda benzemelidir.
class SleepNightListener(val clickListener: (sleepId: Long) -> Unit) {
fun onClick(night: SleepNight) = clickListener(night.nightId)
}- list_item_sleep_night.xml. dosyasını açın.
databloğunun içine,SleepNightListenersınıfını veri bağlama yoluyla kullanılabilir hale getirmek için yeni bir değişken ekleyin. Yeni<variable>öğesinenameclickListener.verin.typeöğesini, aşağıda gösterildiği gibicom.example.android.trackmysleepquality.sleeptracker.SleepNightListenersınıfının tam nitelikli adı olarak ayarlayın. Artık bu düzendenSleepNightListener'tekionClick()işlevine erişebilirsiniz.
<variable
name="clickListener"
type="com.example.android.trackmysleepquality.sleeptracker.SleepNightListener" />- Bu liste öğesinin herhangi bir bölümündeki tıklamaları dinlemek için
android:onClicközelliğiniConstraintLayoutöğesine ekleyin.
Aşağıda gösterildiği gibi, veri bağlama lambda'sı kullanarak özelliğiclickListener: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
- SleepNightAdapter.kt dosyasını açın.
SleepNightAdaptersınıfının oluşturucusunuval clickListener: SleepNightListeneralacak şekilde değiştirin. AdaptörViewHolderöğesini bağladığında bu tıklama işleyicisini sağlaması gerekir.
class SleepNightAdapter(val clickListener: SleepNightListener):
ListAdapter<SleepNight, SleepNightAdapter.ViewHolder>(SleepNightDiffCallback()) {onBindViewHolder()içinde, tıklama işleyicisiniViewHolder'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)clickListenerparametresinibind()öğ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 hatayaAlt+Enter(Windows) veyaOption+Enter(Mac) tuşuna basın.
ViewHoldersınıfının içindekibind()işlevinde, tıklama işleyiciyibindingnesnesine atayın. Bağlama nesnesini güncellemeniz gerektiği için hata mesajı gösterilir.
binding.clickListener = clickListener- 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.
- SleepTrackerFragment.kt dosyasını açın.
onCreateView()bölümündeadapterdeğişkenini bulun. Artık bir tıklama işleyici parametresi beklediği için hata gösterdiğini unutmayın.SleepNightAdapteröğesine bir lambda ileterek tıklama işleyici tanımlayın. Bu basit lambda, aşağıda gösterildiği gibinightIdsimgesini gösteren bir durum mesajı görüntüler.Toastdosyası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()
})- Uygulamayı çalıştırın, öğelere dokunun ve doğru
nightIdile bir bildirim gösterdiklerini doğrulayın. ÖğelerinnightIddeğerleri arttığı ve uygulama en son geceyi ilk olarak gösterdiği için en düşüknightIddeğ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:
- SleepTrackerViewModel.kt dosyasını açın.
SleepTrackerViewModeliçinde, sona doğruonSleepNightClicked()click handler işlevini tanımlayın.
fun onSleepNightClicked(id: Long) {
}onSleepNightClicked()içinde, tıklanan uyku gecesininiddeğerini iletilen_navigateToSleepDetaildeğerine ayarlayarak gezinmeyi tetikleyin.
fun onSleepNightClicked(id: Long) {
_navigateToSleepDetail.value = id
}_navigateToSleepDetail'yi uygulama. Daha önce yaptığınız gibi, gezinme durumu için birprivate MutableLiveDatatanımlayın. Ve bununla birlikte herkese açık bir gettableval.
private val _navigateToSleepDetail = MutableLiveData<Long>()
val navigateToSleepDetail
get() = _navigateToSleepDetail- Uygulama gezinmeyi tamamladıktan sonra çağrılacak yöntemi tanımlayın. Bu parametreyi
onSleepDetailNavigated()olarak adlandırın ve değerininullolarak ayarlayın.
fun onSleepDetailNavigated() {
_navigateToSleepDetail.value = null
}Tıklama işleyicisini çağırmak için kodu ekleyin:
- SleepTrackerFragment.kt dosyasını açın ve uyarlayıcıyı oluşturan ve
SleepNightListenertanı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()
})- Bir öğeye dokunulduğunda
sleepTrackerViewModeliçinde bir tıklama işleyicisini,onSleepNighClicked(), çağırmak için aşağıdaki kodu kısa mesajın altına ekleyin.nightIddeğ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:
- SleepTrackerFragment.kt dosyasını açın.
onCreateView()içinde,managerbildiriminin hemen üstüne, yeninavigateToSleepDetailLiveData'yi gözlemlemek için kod ekleyin.navigateToSleepDetaildeğiştiğindeSleepDetailFragment'ye gidin,night'yi iletin ve ardındanonSleepDetailNavigated()'ü ç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()
}
})- 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:
- 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 itemMaalesef 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.
BindingUtils.ktiçinde, her bağlama bağdaştırıcısı içinitembağımsız değişkeninin türünü null yapılabilir olarak değiştirin ve gövdeyiitem?.let{...}ile sarmalayın. Örneğin,sleepQualityStringiç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)
}
}- 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:

