ConcatAdapter Nedir? Nasıl Kullanılır?
Merhabalar, bu yazımda sizlere bir RecyclerView içerisinde birden fazla adapter kullanabilmemizi sağlayan ConcatAdapter yapısından bahsedeceğim.
Bildiğimiz üzere Header(Title)+RecyclerView yapıları her zaman göz korkutmuştur.
Başlıklar için önce bir TextView ekleyelim, altlarına yatay ve dikey yönde RecyclerView yerleştirelim diyebiliriz basitçe. Fakat bu şekilde tasarladığımızda hayal ettiğimiz yapıya ulaşamayacağız maalesef. Örneğin: Dikey yöndeki listemizi kaydırdığımızda ekranın da onunla birlikte kaymaması 👇
İşte burası o kadar da basit değilmiş dediğimiz ve tıkandığımız nokta 😕 Peki yok mu bunun kolay bir yolu? Elbette var 😎
Daha rahat bir şekilde bu yapıyı kurabileceğimiz en çok kullanılan 2 yöntemi görelim;
- ConcatAdapter
- ViewType
Bu yazıda, diğerine göre daha kolay görülen (bence de öyle) ConcatAdapter yapısını birlikte kuracağız.
Peki nedir bu ConcatAdapter?
ConcatAdapter, bir RecyclerView içerisine birden fazla adapter bağlamamıza olanak tanıyan ve bunu yaparken de gösterim sırasını belirlememize izin veren harikulade bir yapı.
Haydi başlayalım 💪
Tasarımımız şu şekilde olsun 🤔
- Header -> Çok Satanlar
- Horizontal RecyclerView -> Çok Satanlar
- Header -> Tüm Kitaplar
- Vertical RecyclerView -> Tüm Kitaplar
Öncelikle yapacağımız işlemleri bir özetleyelim;
1- “Çok Satanlar” ve “Tüm Kitaplar” için ortak kullanacağımız bir HeaderAdapter oluşturacağız.
2- Çok Satanlar kısmı Horizontal RecyclerView olacak. Bunun için 2 adet adapter yapısı kuracağız 👇
- BestSellersItemAdapter -> Her bir ürünün tasarımına ait adapter.
- BestSellersListAdapter -> Yatay yönde kaydırılabilir ürünlerimizin listeleneceği RecyclerView’ı barındıran adapter.
3- Tüm Kitaplar kısmı Vertical RecyclerView olacak. Bunun için de 2 adet adapter yapısı kuracağız 👇
- AllBooksItemAdapter -> Her bir ürünün tasarımına ait adapter.
- AllBooksListAdapter -> Dikey yönde kaydırılabilir ürünlerimizin listeleneceği RecyclerView’ı barındıran adapter.
4- Oluşturduğumuz 2 Header ve 2 RecyclerView’ı MainActivity’deki RecyclerView içerisinde birleştireceğiz.
Şimdi kullanacağımız adapter ve layoutlarımızı oluşturalım;
Not: Görsellerimizi link üzerinden ekrana yazdıracağız. Bu sebeple internet erişimi ve Picasso kütüphanesini projemize dahil ediyoruz.
İnternet Erişimi
<uses-permission android:name="android.permission.INTERNET" />
Picasso Kütüphanesi
implementation 'com.squareup.picasso:picasso:2.71828'
1- Başlıklar için ortak bir HeaderAdapter oluşturuyoruz 👇
2- Çok Satanlar için 2 adet adapter oluşturuyoruz;
getItemCount() değerini 1 olarak veriyoruz. Çünkü bu adapter, içerisinde çok satanların bulunduğu RecyclerView’ı barındırıyor ve bu recyclerView 1 kere yazdırılacak.
3- Tüm Kitaplar için 2 adet adapter oluşturuyoruz;
getItemCount() değerini 1 olarak veriyoruz. Çünkü bu adapter, içerisinde tüm kitapların bulunduğu recyclerView’ı barındırıyor ve bu recyclerView 1 kere yazdırılacak.
Şimdi gelin bu oluşturduğumuz bu yapıyı çok basit bir şekilde MainActivity içerisinde bulunan ana RecyclerView’a bağlayalım 😎
Öncelikle ConcatAdapter yapısını kullanabilmemiz için bir implementation eklememiz gerekiyor👇
implementation 'androidx.recyclerview:recyclerview:1.2.1
Şimdi son aşamaya yani MainActivity içerisindeki kodlamamıza geçelim 🥳
ConcatAdapter ile birlikte gelen 2 adet position alma kodumuz mevcut;
- bindingAdapterPosition -> Öğenin içinde barındığı adaptera göre position değeri döndürür.
- absoluteAdapterPosition -> Öğenin, bağlanan tüm adapterlara göre position değerini döndürür
Adapter Ekleme
Oluşturduğunuz ConcatAdapter nesnesine daha sonra adapter ekleme işlemi yapabilirsiniz. İkinci görselde gösterildiği gibi istediğiniz sıraya da ekleme yapılabilirsiniz.
Adapter Silme
Ekleme yapabildiğimiz gibi, istediğimiz adapterı silebiliriz de.
Sonuç
Proje Github Linki 👇
Ben Android Student Club ekip üyesi Caner Türe. Yazımı okuduğunuz için teşekkür ederim. Bu yazımda ConcatAdapter ile istediğimiz yapıyı kolaylıkla elde etmiş olduk. Bir sonraki yazımda ikinci bir yöntem olan ViewType kullanımından bahsedeceğim. Takipte kalın 🙂