Android / Kotlin ile RecyclerView kullanımı

Mehmet Sait Işık
4 min readMay 30, 2020

Merhabalar sevgili AndroidDeveloper adayları,
Öncelikle Recyclerview nedir? Ne için kullanılır? Bu soruları cevaplandıralım ve daha sonra teknik kısımda gerekli yazımları öğrenmek için yola koyulalım.

RECYLERVİEW NEDİR ? NE İÇİN ÇIKMIŞTIR ?

Recyclerview Listview ve Gridview yerine çıkmış ve içinde barındırdığı özellikler sayesinde üst düzey performans esnek görüntü kabiliyeti ve çeşitli animasyon özellikleri ile birlikte Android Developerların özellikle son zamanlarda kullandığı listeleme ve görüntüleme aracıdır.

İş mülakatlarında neden Recylerview diye sorulduğunda genelde performans odaklı çalıştığı için kullanıldığı söylenilir.
Örnek vermek gerekirse Listview ile 100 adet veri çektiniz ve bunları listede gösterdiniz diyelim listview bu verilerin hepsini göstermeye çalışır ve bu cihazın performansına bağlı olarak uygulamanızın daha yavaş çalışmasına sebep olur. Recyclerview ile 100 adet veri çektiğinizi varsayalım. Kullanıcı o an ekranın hangi alanındaysa o alanda gelmesi gereken veriler gelir ve uygulamanızın performansı artmış olur. Ek olarak Recylerview Listview’a göre görsel açıdan da daha çeşitlidir.

Kesinlikle gözünüz korkmasın arkadaşlar. İlk gördüğümde kafam karışmıştı yapamayacağım kaygısına düşmüştüm fakat bir kaç deneme ile yapabileceğinizi göreceksiniz. 3–4 örnek ile rahatça anlayabilirsiniz :)

Evet başlıyoruz,Android Studyo’da boş bir proje başlatalım.

Build.gradle(🍏:app) kısmına aşşağıdaki dosyaları implemant edelim.

implementation 'androidx.recyclerview:recyclerview:1.1.0'
implementation 'androidx.cardview:cardview:1.0.0'

Xml dosylarımızın bulunduğu kısıma sağ tık ile (sağ tık)Layout>New>Layout Resource File kısmına tıklıyoruz.
Burada yaptığımız şey Recylerview da göstereceğimiz alanı oluşturmak olacak.

File name: xml dosyanıza isim belirliyorsunuz.
Root element: Layout dosyanızın türünü seçiyorsunuz CardView seçin.
Ok tuşuna tıklayalım.

İçeriğine ise bir ConstraintLayout ekledim. Constraint içine İmageView sola hizalı şekilde. Textview image hizalı şekilde. Textview sola hizalı şekilde ekledim.

Daha sonra MainActivity.xml dosyamıza geliyoruz ve Recylerview ekliyoruz.
Sağa sola yukarı aşşağı 8dp mesafe bıraktım daha şık durması için.

veri isminde bir data class oluşturduk. Kotlin dosylarımızın bulunduğu yere sağ tık yapıp > new > Kotlin File/Class tıkladık ve Class kısmına tıklayıp veri yazdık.

RecyclerAdapter isminde bir adapter oluşturduk. Veri oluştururken gittiğimiz yol nasılsa o şekilde file ismine RecylerAdapter diyerek oluşturabilirsiniz.

Kodlarımızın tamamı bunlar arkadaşlar. Bakarak da geçirebilirsiniz github linkinden çekerek de deneyebilirsiniz.

MainActivity.kt da yaptığımız var veriKaynagi= ArrayList<veri>() verikaynağını main de göstermek için tanımladık.

fun getVeri():MutableList<veri>{
val models= mutableListOf(
veri(“Köpek”,”Yavru köpekcik”,R.drawable.ani_dog_two),
veri(“Kedi”,”Yavru minik kedicik”,R.drawable.ani_cat_one),
veri(“Küskün kedi”,”Üzülmüş bir kedi”,R.drawable.ani_cat_three),
veri(“Ceylan”,”Temiz ve narin bir ceylan”,R.drawable.ani_deer_one),
veri(“Kuş”,”Mis gibi yeşil bir papağan”,R.drawable.bird_parrot_one),
veri(“Ceylan”,”Asil bir ceylan”,R.drawable.ani_deer_three),
veri(“Kuş”,”Nadir bir kuş”,R.drawable.bird_parrot_five),
veri(“Kedi”,”Haşin kedi”,R.drawable.ani_cat_four)

)
return models

bu fonksiyon ile drawable klosorumda buluna görsellerle birlikte Başlık,açıklama ve image kısımlarını doldurdum.

recyclerview.layoutManager = LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false)
recyclerview.adapter = RecyclerAdapter(getVeri())

Layoutmanager ile önce recylerview görünümünü belirledim. Listeli şekilde görünmesi içine LinearLayoutManager.VERTİCAL yaptım.

recyclerview.adapter = RecyclerAdapter(getVeri())

Verileri recylerview içinde göstermek için bu tanımlamayı yaptım ve verileri listeleme işlemini yapması için recylerview’a gönderdim.

Gelelim RecyclerAdapter.kt kısmına;

class RecyclerAdapter(val countryList: MutableList<veri>) : RecyclerView.Adapter<RecyclerAdapter.ModelViewHolder>() {

şu tanımlama ile önce veri kaynağımı adapter içinde tanıttım.
daha sonra Recylerview için adapter tanımlamasını yaptım ve ModelViewHolder clas’ı oluşturdum.

ModelViewHolder class’ı için veri kaynağımda oluşturduğum Title,Descriptions ve Image kısımlarının tanımlamasını gerçekleştirdim.

class ModelViewHolder(view: View) : RecyclerView.ViewHolder(view) {
val Titles: TextView = view.findViewById(R.id.tv_title)
val Descriptions: TextView = view.findViewById(R.id.tv_description)
val Image: ImageView = view.findViewById(R.id.imgLogo)

fun bindItems(item: veri) {
Titles.setText(item.Titles)
Descriptions.setText(item.Description)
Image.setImageResource(item.Images)
}
}

Bu aşşağıda gördüğünüz kod blogunu oluşturmak için uğraşmanıza gerek kalmadan ana class’ı oluşturduğunuz an kızarıklık oluşacaktır. O kızarıklığa alt+enter ile cevap verirseniz implement etmeniz gereken dosyaları gösterecek ve kod blogunuzu daha hızlı oluşturmanızı sağlayacaktır ideniz. Fakat kafa karışıklığı olmaması adına manuel de yazabilirsiniz.

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ModelViewHolder {
val view = LayoutInflater.from(parent.context).inflate(R.layout.item_layout, parent, false)
return ModelViewHolder(view)
}

override fun getItemCount(): Int {
return countryList.size
}

override fun onBindViewHolder(holder: ModelViewHolder, position: Int) {
holder.bindItems(countryList.get(position))
}
}

getItemCount: listeleme işlemi icin verilerinizin çoğunluğunu ele alma işlemini yapar ve gösterilecek veriler için ön hazırlık yapar.

onCreateViewHolder: View’ın yaratılma aşamasını sağlar.

onBindViewHolder: Bulunduğunuz pozisyon bilgisine göre işlem yapmanızı sağlar.

Uygulamayı çalıştırdığımda şöyle bir görüntü elde ettim.

Uygulama Çıktısı

Uygulamanın tamamı için link bıraktım. Umarım faydası olur. Recylerview geniş kapsamlı bir konu fakat ben küçük bir noktasına değinmek istedim kesinlikle pratik yaparak kavranabilecek bir konu gözünüzü korkutmadan bir kaç basit proje yaparak rahatça öğrenebilirsiniz. İyi çalışmalar dilerim.

--

--