Android RecyclerView İçin Adapter Yazmaya Ne Dersiniz?

Pelşin KAPLAN
Finagotech
Published in
3 min readJun 30, 2022

Elimizdeki bir listeyi RecyclerView kullanarak kullanıcıya göstermek isteyenler burada mı? O zaman bir bakalım neymiş bu RecyclerView ve nasıl kullanılır bu RecyclerView.

RecyclerView verileri listelemek için kullanılan ve aynı zamanda kendi içinde scroll yapan bir yapıdır. ListView’ın büyümüş gelişmiş hali de diyebiliriz. Performans açısından oldukça büyük bir artısı var. Ne mi? Haydi görelim.

Elinizde 1000 tane veriden oluşan bir list var ve bunu göstermek istiyorsunuz. Uygulamanın bu verilerin hepsini çizip kullanıcıya gösterdiğini düşünsenize. Opps, işte memory leak! Bunun önüne geçmek için adamlar çalışmış ve bu bir sürü veririn sadece 10 tanesini çizip scroll edildikçe diğerlerini çizmesini sağlamışlar.

Şimdi de bu RecyclerView’ı nasıl kullanırız ona bakalım o zaman. Ufacık bir proje yaparak öğrensek bence harika olur gibi. Öncelikle bir proje oluşturmakla başlıyorum o halde.

RecyclerView kullanacağım ve burada belirli bir formatta datalar göstereceğim için ilk adım RecyclerViewım içinde göstermek istediğim dataların görünümünü oluşturmak. item_pokemon diye bir layout dosyası oluşturuyorum ve içerisine pokemonlarımın resmini ve adını göstermelik iki adet view ekliyorum, aşağıdaki gibi…

Şimdi de bu itemı gösterebilmek için activity_main dosyama gidip bir RecyclerView ekliyorum. Eklediğim recyclerView’a listItem olarak da item_pokemon olarak oluşturduğum layoutu veriyorum.

Buraya kadar UI ile ilgili düzenlemelerimizi yaptık, sırada bunların içini doldurmak var. Ama önce kullanacağım modeli oluşturmak istiyorum. Sadece bir imageUrl ve name den oluşan bir PokemonModel data classı.

Şimdi de gelelim en calısı noktalardan birine. Öncelikle belirteyim viewBinding kullandım. RecyclerView’ımdaki dataları tek tek ekleyebilmek için bir adapter oluşturmam lazım. Adapter bir kaynağı(pokemon listim, birazdan yazacağız), o kaynağa ihtiyacı olan nesneyle(RecyclerView) bağlamak için kullandığımız bir yapıdır.

O zaman başlıyorum! PokemonAdapter’ı oluşturdum, bir de ViewHolder’ımı oluşturuyorum. Bu kısımda viewBindingi kullanarak constructor içine layotumu veriyorum ve RecyclerView.ViewHolder classını extend ediyorum. Başkası yazmış biz değiştire değiştire kullanıyoruz yani. Ben genelde bu ViewHolder classımı Adapter classımla aynı yere konumlandırıyorum, inner class olarak dahil edenler de var, başka bir dosyada yeni bir class olarak oluşturanlar da. Yani paşa gönlünüz nasıl isterse o şekilde kullanabilirsiniz.

ViewHolder classımı da oluşturduğuma göre Adapter’a devam ediyorum. RecyclerView’da göstermek istediğim listi bu classa aktarmam gerekiyor, bunu bir metod yardımıyla da yapabilirsiniz fakat ben construtor içerisinde gönderiyorum. Ardından da RecyclerView.Adapter<PokemonViewHolder>’ı extend ediyorum, varolanı evirip çevirip kullanmaya devam. Ardından bana kırmızılar içinde kızacak çünkü extend ettiğim classın implement etmem gereken metotları var. onCreateViewHolder metodu içerisinde binding ve inflater tanımlamamı yapıyorum. Sonra asıl kullandığımız kısım olan onBindViewHolder’a geçiyorum ve içerisinde constructordan almış olduğum listin parametredeki position değişkenine göre olan itemını alıp, o modelin bilgilerini gerekli fieldlara basıyorum. Itemdaki name textviewına pokemonumun name’ini basıyorum, imageView alanına ise Glide yardımıyla pokemonuun resmini basıyorum. Glide da neyin nesi derseniz sizi diğer yazıyoma bekliyorum :D. Bu metot da bu kadardı ve bir ufak daha metod var o da getItemCount(). Bizden listin size ını istiyor ve aşağıdaki gibi direkt return ediyorum.

Apater classımız da bittiyse artık RecyclerView ile olan bağlantısını kurabiliriz demektir bu. Önce listimi oluşturuyorum, kenardan köşeden pokemon resimleri toplayıp burada bir list içine attım.

Şimdi önce adapter diye bir değişken oluşturup bunu en yukarıda PokemonAdapter olarak belirttim. Ayrıca bir satırda iki adet item olmasını istiyorum o yüzden GridLayoutManager kullanacağım ve iki tane istediğimi de burada belirteceğim. Ardından RecyclerViewımın layoutManagerının oluşturmuş olduğum GridLayoutManager olduğunu söyleyeceğim. Yönünün ise dikey olmasını istediğim için vertical diye belirtiyorum(belirtmesem de defaultta vertical olarak geliyor bu arada). Son olarak adapterın içine listimi vererek yularıda oluşturduğum variable a eşitliyorum ve layotumdaki RcyclerView’ımın adapterının bu olduğunu belirtiyorum.

Uygulamamızın çalışma gifini altta bıraktım. O zaman ben kaçar…

Gitmeden projenin github linkini de buralara fırlatıyorum. Mutlu kodlamalar :)

--

--