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 codelab'de, RecyclerView içinde gösterilen listenin genişliğini kapsayan bir üstbilgi eklemeyi öğreneceksiniz. Önceki codelab'lerdeki uyku izleme uygulamasını temel alırsınız.
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, DAO oluşturma ve varlıkları tanımlama- Veritabanı etkileşimleri ve uzun süren diğer 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?RecyclerView.içindeki öğelerde tıklamaları yakalama ve işleme
Neler öğreneceksiniz?
- Farklı düzene sahip öğeler eklemek için
RecyclerViewile birden fazlaViewHolderöğesini kullanma Özellikle,ViewHolderöğesini kullanarakRecyclerViewiçinde gösterilen öğelerin üzerine nasıl başlık ekleneceği.
Yapacaklarınız
- Bu serideki önceki codelab'de yer alan TrackMySleepQuality uygulamasını temel alın.
RecyclerViewiçinde gösterilen uyku gecelerinin üstünde, ekranın genişliğini kaplayan bir başlık ekleyin.
Başlangıçta kullandığınız uyku izleme uygulamasının, aşağıdaki şekilde gösterildiği gibi parçalarla temsil edilen üç ekranı vardır.
|
|
|
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. Ortada gösterilen ikinci ekranda uyku kalitesi puanı seçilir. Üçüncü ekran, kullanıcı ızgaradaki bir öğeye dokunduğunda açılan ayrıntı görünümüdür.
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ının yer aldığı basitleştirilmiş bir mimari kullanır.

Bu codelab'de, görüntülenen öğe ızgarasına bir başlık ekleyeceksiniz. Son ana ekranınız şu şekilde görünür:

Bu codelab'de, farklı düzenler kullanan öğeleri RecyclerView içine dahil etmenin genel prensibi öğretilmektedir. Listenizde veya tablonuzda başlıklar olması yaygın bir örnektir. Bir listede, öğe içeriğini açıklayan tek bir başlık olabilir. Bir listede, öğeleri tek bir listede gruplandırmak ve ayırmak için birden fazla başlık da olabilir.
RecyclerView, verileriniz veya her öğenin düzen türü hakkında hiçbir şey bilmez. LayoutManager, ekrandaki öğeleri düzenler ancak bağdaştırıcı, verileri görüntülenecek şekilde uyarlar ve görünüm tutucuları RecyclerView'ye iletir. Bu nedenle, bağdaştırıcıda başlık oluşturmak için kodu ekleyeceksiniz.
Üstbilgi eklemenin iki yolu vardır.
RecyclerView içinde listedeki her öğe, 0'dan başlayan bir dizin numarasına karşılık gelir. Örneğin:
[Gerçek Veriler] -> [Adaptör Görüntülemeleri]
[0: SleepNight] -> [0: SleepNight]
[1: SleepNight] -> [1: SleepNight]
[2: SleepNight] -> [2: SleepNight]
Bir listeye başlık eklemenin bir yolu, başlığınızın gösterilmesi gereken dizinleri kontrol ederek bağdaştırıcınızı farklı bir ViewHolder kullanacak şekilde değiştirmektir. Adapter, başlığı takip etmekten sorumlu olacaktır. Örneğin, tablonun üst kısmında bir başlık göstermek için sıfır tabanlı öğeyi düzenlerken başlık için farklı bir ViewHolder döndürmeniz gerekir. Ardından, diğer tüm öğeler aşağıda gösterildiği gibi başlık ofsetiyle eşlenir.
[Gerçek Veriler] -> [Adaptör Görüntülemeleri]
[0: Header]
[0: SleepNight] -> [1: SleepNight]
[1: SleepNight] -> [2: SleepNight]
[2: SleepNight] -> [3: SleepNight.
Başlık eklemenin bir diğer yolu da veri ızgaranızın temel alınan veri kümesini değiştirmektir. Gösterilmesi gereken tüm veriler bir listede saklandığından, listeyi başlığı temsil eden öğeleri içerecek şekilde değiştirebilirsiniz. Bu yöntemi anlamak biraz daha kolaydır ancak farklı öğe türlerini tek bir listede birleştirebilmek için nesnelerinizi nasıl tasarladığınızı düşünmeniz gerekir. Bu şekilde uygulandığında bağdaştırıcı, kendisine iletilen öğeleri gösterir. Bu nedenle, 0 konumundaki öğe bir başlık, 1 konumundaki öğe ise ekrandakiyle doğrudan eşlenen bir SleepNight.
[Gerçek Veriler] -> [Adaptör Görüntülemeleri]
[0: Header] -> [0: Header]
[1: SleepNight] -> [1: SleepNight]
[2: SleepNight] -> [2: SleepNight]
[3: SleepNight] -> [3: SleepNight]
Her metodolojinin avantajları ve dezavantajları vardır. Veri kümesini değiştirmek, bağdaştırıcı kodunun geri kalanında çok fazla değişikliğe neden olmaz ve veri listesini değiştirerek başlık mantığı ekleyebilirsiniz. Öte yandan, başlıklar için dizinleri kontrol ederek farklı bir ViewHolder kullanmak, başlığın düzeni konusunda daha fazla özgürlük sağlar. Ayrıca, temel verileri değiştirmeden verilerin görünüme nasıl uyarlanacağını bağdaştırıcının işlemesine de olanak tanır.
Bu codelab'de, listenin başında bir başlık göstermek için RecyclerView öğenizi güncelleyeceksiniz. Bu durumda, uygulamanız başlık için veri öğelerinden farklı bir ViewHolder kullanır. Uygulama, hangi ViewHolder öğesinin kullanılacağını belirlemek için listenin dizinini kontrol eder.
1. adım: DataItem sınıfı oluşturun
Öğe türünü soyutlamak ve bağdaştırıcının yalnızca "öğelerle" ilgilenmesini sağlamak için SleepNight veya Header öğesini temsil eden bir veri tutucu sınıfı oluşturabilirsiniz. Veri kümeniz, veri sahibi öğelerinin bir listesi olur.
Başlangıç uygulamasını GitHub'dan edinebilir veya önceki codelab'de oluşturduğunuz SleepTracker uygulamasını kullanmaya devam edebilirsiniz.
- GitHub'dan RecyclerViewHeaders-Starter kodunu indirin. RecyclerViewHeaders-Starter dizini, bu codelab için gereken SleepTracker uygulamasının başlangıç sürümünü içerir. İsterseniz önceki codelab'de tamamladığınız uygulamanızı da kullanabilirsiniz.
- SleepNightAdapter.kt dosyasını açın.
SleepNightListenersınıfının altında, en üst düzeydeDataItemadlı birsealedsınıfı tanımlayın. Bu sınıf, bir veri öğesini temsil eder.
Birsealedsınıfı, kapalı bir türü tanımlar. Bu,DataItemalt sınıflarının tamamının bu dosyada tanımlanması gerektiği anlamına gelir. Bu nedenle, alt sınıfların sayısı derleyici tarafından bilinir. Kodunuzun başka bir bölümünün, bağdaştırıcınızı bozabilecek yeni birDataItemtürü tanımlaması mümkün değildir.
sealed class DataItem {
}DataItemsınıfının gövdesinde, farklı türlerdeki veri öğelerini temsil eden iki sınıf tanımlayın. İlki,SleepNightItem. Bu,SleepNightöğesinin sarmalayıcısıdır vesleepNightadlı tek bir değer alır. Sınıfın bir parçası olması içinDataItemile genişletin.
data class SleepNightItem(val sleepNight: SleepNight): DataItem()- İkinci sınıf, başlığı temsil eden
Header'dır. Başlıkta gerçek veri olmadığından bunuobjectolarak bildirebilirsiniz. YaniHeaderöğesinin yalnızca bir örneği olacaktır. Tekrar uzatmasını isteyinDataItem.
object Header: DataItem()DataItemiçinde, sınıf düzeyindeidadlı birabstractLongözelliği tanımlayın. Adaptör, bir öğenin değişip değişmediğini ve nasıl değiştiğini belirlemek içinDiffUtilkullandığındaDiffItemCallback, her öğenin kimliğini bilmelidir.SleepNightItemveHeader,idsoyut özelliğini geçersiz kılması gerektiğinden hata görürsünüz.
abstract val id: LongSleepNightItemiçindenightIddeğerini döndürmek içiniddeğerini geçersiz kılın.
override val id = sleepNight.nightIdHeaderiçinde,iddeğerini geçersiz kılarakLong.MIN_VALUEdeğerini döndürün. Bu değer çok çok küçük bir sayıdır (kelimenin tam anlamıyla -2 üzeri 63). Bu nedenle, hiçbir zaman mevcutnightIdile çakışmaz.
override val id = Long.MIN_VALUE- Tamamlanmış kodunuz aşağıdaki gibi görünmeli ve uygulamanız hatasız bir şekilde oluşturulmalıdır.
sealed class DataItem {
abstract val id: Long
data class SleepNightItem(val sleepNight: SleepNight): DataItem() {
override val id = sleepNight.nightId
}
object Header: DataItem() {
override val id = Long.MIN_VALUE
}
}2. adım: Başlık için bir ViewHolder oluşturun
TextViewsimgesini gösteren header.xml adlı yeni bir düzen kaynağı dosyasında üstbilgi için düzen oluşturun. Bu konuda heyecan verici bir şey yok. İşte kod:
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="Sleep Results"
android:padding="8dp" />"Sleep Results"öğesini bir dize kaynağına ayıklayın veheader_textolarak adlandırın.
<string name="header_text">Sleep Results</string>- SleepNightAdapter.kt dosyasında,
SleepNightAdapteriçinde,ViewHoldersınıfının üzerinde yeni birTextViewHoldersınıfı oluşturun. Bu sınıf, textview.xml düzenini genişletir ve birTextViewHolderörneği döndürür. Bunu daha önce yaptığınız için kodu burada bulabilirsiniz.ViewveRöğelerini içe aktarmanız gerekir:
class TextViewHolder(view: View): RecyclerView.ViewHolder(view) {
companion object {
fun from(parent: ViewGroup): TextViewHolder {
val layoutInflater = LayoutInflater.from(parent.context)
val view = layoutInflater.inflate(R.layout.header, parent, false)
return TextViewHolder(view)
}
}
}3. adım: SleepNightAdapter'ı güncelleyin
Ardından, SleepNightAdapter beyanını güncellemeniz gerekir. Yalnızca bir ViewHolder türünü desteklemek yerine, herhangi bir görünüm tutucu türünü kullanabilmelidir.
Öğe türlerini tanımlama
SleepNightAdapter.ktiçinde, en üst düzeyde,importifadelerinin altında veSleepNightAdapterifadesinin üstünde, görünüm türleri için iki sabit tanımlayın.RecyclerView, her öğenin görünüm türünü ayırt etmelidir. Böylece, öğeye doğru bir görünüm tutucu atayabilir.
private val ITEM_VIEW_TYPE_HEADER = 0
private val ITEM_VIEW_TYPE_ITEM = 1SleepNightAdapteriçinde, mevcut öğenin türüne bağlı olarak doğru başlığı veya öğe sabitini döndürmek içingetItemViewType()değerini geçersiz kılacak bir işlev oluşturun.
override fun getItemViewType(position: Int): Int {
return when (getItem(position)) {
is DataItem.Header -> ITEM_VIEW_TYPE_HEADER
is DataItem.SleepNightItem -> ITEM_VIEW_TYPE_ITEM
}
}SleepNightAdapter tanımını güncelleme
SleepNightAdaptertanımında,ListAdapteriçin ilk bağımsız değişkeniSleepNightdeğerindenDataItemdeğerine güncelleyin.SleepNightAdaptertanımında,ListAdapteriçin ikinci genel bağımsız değişkeniSleepNightAdapter.ViewHolderyerineRecyclerView.ViewHolderolarak değiştirin. Gerekli güncellemelerle ilgili bazı hatalar görürsünüz ve sınıf başlığınız aşağıda gösterildiği gibi görünmelidir.
class SleepNightAdapter(val clickListener: SleepNightListener):
ListAdapter<DataItem, RecyclerView.ViewHolder>(SleepNightDiffCallback()) {onCreateViewHolder() işlevini güncelleme
onCreateViewHolder()işlevinin imzasını,RecyclerView.ViewHolderdöndürecek şekilde değiştirin.
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder- Her öğe türü için uygun görünüm tutucuyu test etmek ve döndürmek üzere
onCreateViewHolder()yönteminin uygulanmasını genişletin. Güncellenen yönteminiz aşağıdaki koda benzemelidir.
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
return when (viewType) {
ITEM_VIEW_TYPE_HEADER -> TextViewHolder.from(parent)
ITEM_VIEW_TYPE_ITEM -> ViewHolder.from(parent)
else -> throw ClassCastException("Unknown viewType ${viewType}")
}
}onBindViewHolder() işlevini güncelleme
onBindViewHolder()parametresinin türünüViewHolder'danRecyclerView.ViewHolder'ye değiştirin.
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int)- Verilerin yalnızca
ViewHolderise görünüm sahibine atanması için bir koşul ekleyin.
when (holder) {
is ViewHolder -> {...}getItem()tarafından döndürülen nesne türünüDataItem.SleepNightItemolarak yayınlayın. TamamlanmışonBindViewHolder()işleviniz aşağıdaki gibi görünmelidir.
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
when (holder) {
is ViewHolder -> {
val nightItem = getItem(position) as DataItem.SleepNightItem
holder.bind(nightItem.sleepNight, clickListener)
}
}
}diffUtil geri çağırmalarını güncelleme
SleepNightDiffCallbackiçindeki yöntemleri,SleepNightyerine yeniDataItemsınıfınızı kullanacak şekilde değiştirin. Aşağıdaki kodda gösterildiği gibi lint uyarısını bastırın.
class SleepNightDiffCallback : DiffUtil.ItemCallback<DataItem>() {
override fun areItemsTheSame(oldItem: DataItem, newItem: DataItem): Boolean {
return oldItem.id == newItem.id
}
@SuppressLint("DiffUtilEquals")
override fun areContentsTheSame(oldItem: DataItem, newItem: DataItem): Boolean {
return oldItem == newItem
}
}Başlığı ekleyip gönderin.
SleepNightAdapteriçinde,onCreateViewHolder()'un altında, aşağıda gösterildiği gibi biraddHeaderAndSubmitList()işlevi tanımlayın. Bu işlev,SleepNightlistesini alır. Listenizi göndermek içinsubmitList()yerine bu işlevi kullanarak bir başlık ekleyip listeyi göndereceksiniz.ListAdapter
fun addHeaderAndSubmitList(list: List<SleepNight>?) {}addHeaderAndSubmitList()içinde, iletilen listenullise yalnızca bir başlık döndürün. Aksi takdirde, başlığı listenin başına ekleyin ve listeyi gönderin.
val items = when (list) {
null -> listOf(DataItem.Header)
else -> listOf(DataItem.Header) + list.map { DataItem.SleepNightItem(it) }
}
submitList(items)- SleepTrackerFragment.kt dosyasını açın ve
submitList()çağrısınıaddHeaderAndSubmitList()olarak değiştirin.
- Uygulamanızı çalıştırın ve başlığınızın uyku öğeleri listesinde ilk öğe olarak nasıl gösterildiğini gözlemleyin.

Bu uygulamada düzeltilmesi gereken iki sorun var. Biri görünür, diğeri görünür değil.
- Başlık, sol üst köşede gösterilir ve kolayca ayırt edilemez.
- Tek başlıklı kısa bir listede bu durum çok önemli olmasa da kullanıcı arayüzü iş parçacığında
addHeaderAndSubmitList()ile liste manipülasyonu yapmamalısınız. Yüzlerce öğe, birden fazla başlık ve öğelerin nereye eklenmesi gerektiğine karar verecek mantık içeren bir liste düşünün. Bu işlem bir eş yordama ait olmalıdır.
addHeaderAndSubmitList() işlevini eşzamanlı yordamları kullanacak şekilde değiştirin:
SleepNightAdaptersınıfının en üst düzeyinde,Dispatchers.Defaultile birCoroutineScopetanımlayın.
private val adapterScope = CoroutineScope(Dispatchers.Default)addHeaderAndSubmitList()içinde, listeyi değiştirmek içinadapterScopeiçinde bir eşzamanlı rutin başlatın. Ardından, aşağıdaki kodda gösterildiği gibi listeyi göndermek içinDispatchers.Mainbağlamına geçin.
fun addHeaderAndSubmitList(list: List<SleepNight>?) {
adapterScope.launch {
val items = when (list) {
null -> listOf(DataItem.Header)
else -> listOf(DataItem.Header) + list.map { DataItem.SleepNightItem(it) }
}
withContext(Dispatchers.Main) {
submitList(items)
}
}
}- Kodunuz oluşturulup çalıştırılmalıdır ve herhangi bir fark görmezsiniz.
Şu anda başlık, ızgaradaki diğer öğelerle aynı genişlikte olup yatay ve dikey olarak bir aralık kaplamaktadır. Izgaranın tamamı, yatay olarak tek bir genişlikte üç öğeye sığdığı için başlık yatay olarak üç genişlik kullanmalıdır.
Başlık genişliğini düzeltmek için GridLayoutManager'ya verilerin tüm sütunlara ne zaman yayılacağını söylemeniz gerekir. Bunu, SpanSizeLookup öğesini GridLayoutManager üzerinde yapılandırarak yapabilirsiniz. Bu, GridLayoutManager öğesinin listedeki her öğe için kaç sütun kullanılacağını belirlemek üzere kullandığı bir yapılandırma nesnesidir.
- SleepTrackerFragment.kt dosyasını açın.
managerdeğerini tanımladığınız koduonCreateView()dosyasının sonuna doğru bulun.
val manager = GridLayoutManager(activity, 3)managerbölümünün altında,manager.spanSizeLookupdeğerini gösterildiği gibi tanımlayın.setSpanSizeLookupbir lambda almadığı içinobjectoluşturmanız gerekir. Kotlin'deobjectoluşturmak içinobject : classnameyazın. Bu örnekteGridLayoutManager.SpanSizeLookupyazın.
manager.spanSizeLookup = object : GridLayoutManager.SpanSizeLookup() {
}- Oluşturucuyu çağırmak için derleyici hatası alabilirsiniz. Bu durumda, oluşturucu çağrısını uygulamak için
Option+Enter(Mac) veyaAlt+Enter(Windows) ile amaç menüsünü açın.
- Ardından,
objectüzerinde yöntemleri geçersiz kılmanız gerektiğini belirten bir hata mesajı alırsınız. İmleciobjectüzerine getirin, niyetler menüsünü açmak içinOption+Enter(Mac) veyaAlt+Enter(Windows) tuşuna basın, ardındangetSpanSize()yöntemini geçersiz kılın.
getSpanSize()gövdesinde her konum için doğru yay boyutunu döndürün. 0 konumunun yayılma boyutu 3, diğer konumların yayılma boyutu ise 1'dir. Tamamlanmış kodunuz aşağıdaki gibi görünmelidir:
manager.spanSizeLookup = object : GridLayoutManager.SpanSizeLookup() {
override fun getSpanSize(position: Int) = when (position) {
0 -> 3
else -> 1
}
}- Üstbilginizin görünümünü iyileştirmek için header.xml dosyasını açın ve bu kodu header.xml düzen dosyasına ekleyin.
android:textColor="@color/white_text_color"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="16dp"
android:background="@color/colorAccent"- Uygulamanızı çalıştırın. Uygulamanız aşağıdaki ekran görüntüsüne benzemelidir.

Tebrikler! Tamamladınız.
Android Studio projesi: RecyclerViewHeaders
- Başlık, genellikle bir listenin genişliğini kaplayan ve başlık veya ayırıcı olarak kullanılan bir öğedir. Bir listede, öğe içeriğini açıklayan tek bir başlık veya öğeleri gruplandırıp birbirinden ayıran birden fazla başlık olabilir.
- Bir
RecyclerView, heterojen bir öğe grubunu (ör. başlıklar ve liste öğeleri) barındırmak için birden fazla görünüm tutucu kullanabilir. - Üstbilgi eklemenin bir yolu, üstbilginizin gösterilmesi gereken dizinleri kontrol ederek bağdaştırıcınızı farklı bir
ViewHolderkullanacak şekilde değiştirmektir. Üstbilginin takip edilmesindenAdaptersorumludur. - Başlık eklemenin bir diğer yolu da veri ızgaranızın temel alınan veri kümesini (listeyi) değiştirmektir. Bu codelab'de yaptığınız işlem de budur.
Başlık eklemenin başlıca adımları şunlardır:
- Başlık veya veri içerebilen bir
DataItemoluşturarak listenizdeki verileri soyutlayın. - Adaptörde üstbilgi için bir düzene sahip bir görünüm tutucu oluşturun.
- Herhangi bir
RecyclerView.ViewHoldertürünü kullanmak için bağdaştırıcıyı ve yöntemlerini güncelleyin. onCreateViewHolder()içinde, veri öğesi için doğru türde görünüm tutucuyu döndürün.DataItemsınıfıyla çalışmak içinSleepNightDiffCallbackuygulamasını güncelleyin.- Veri kümesine başlık eklemek için eş yordamları kullanan ve ardından
submitList()işlevini çağıran biraddHeaderAndSubmitList()işlevi oluşturun. - Yalnızca başlığın üç sütun genişliğinde olması için
GridLayoutManager.SpanSizeLookup()öğesini uygulayın.
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
ViewHolder ile ilgili aşağıdaki ifadelerden hangisi doğrudur?
▢ Bir bağdaştırıcı, başlıkları ve çeşitli veri türlerini tutmak için birden fazla ViewHolder sınıfı kullanabilir.
▢ Veriler için tam olarak bir görünüm tutucunuz ve başlık için bir görünüm tutucunuz olabilir.
▢ Bir RecyclerView birden fazla başlık türünü destekler ancak verilerin tek tip olması gerekir.
▢ Üstbilgi eklerken, üstbilgiyi doğru konuma yerleştirmek için RecyclerView alt sınıfını oluşturursunuz.
2. Soru
RecyclerView ile birlikte ne zaman eş yordam kullanmalısınız? Doğru olan tüm ifadeleri seçin.
▢ Hiçbir zaman. RecyclerView, bir kullanıcı arayüzü öğesidir ve eş yordamlar kullanmamalıdır.
▢ Kullanıcı arayüzünü yavaşlatabilecek uzun süren görevler için eş yordamları kullanın.
▢ Liste manipülasyonları uzun sürebilir ve her zaman eş yordamlar kullanılarak yapılmalıdır.
▢ Ana iş parçacığının engellenmesini önlemek için askıya alma işlevleriyle birlikte eş yordamlar kullanın.
3. Soru
Birden fazla ViewHolder kullanırken aşağıdakilerden hangisini YAPMANIZA gerek YOKTUR?
▢ ViewHolder içinde, gerektiğinde genişletilecek birden fazla düzen dosyası sağlayın.
▢ onCreateViewHolder() içinde, veri öğesi için doğru görünüm tutucu türünü döndürün.
▢ onBindViewHolder() içinde, yalnızca görünüm tutucu veri öğesi için doğru türde bir görünüm tutucuysa verileri bağlayın.
▢ Herhangi bir RecyclerView.ViewHolder öğesini kabul etmek için bağdaştırıcı sınıfı imzasını genelleştirin.
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.


