ListView, öğeleri dikey olarak kayan bir listede göstermeniz gerektiğinde kullanılır. Bunun en iyi örneği, cihazımızın Kişi Listesi’dir. ListView ile kullanıcı, yukarı ve aşağı kaydırırken bilgilere kolayca göz atabilir. Her öğe arasında ayırıcı ayarlayabilir ve UI tasarımınıza göre yüksekliğini ve rengini ayarlayabilirsiniz.
Bir ListView içinde, TextView kullanarak Metin öğelerinin listesini veya ImageView kullanarak resimleri veya başka bir görünüm veya görünümlerin bir kombinasyonunu gösterebiliriz.
ListView genellikle büyük bir veri kümesini görüntülemek için kullanıldığından, tüm veriler için manuel olarak liste öğeleri oluşturmak mümkün değildir, bu nedenle Android bize veri kümelerinden ListView’e veri sağlamak için kullanılabilecek özel Adapter sınıfları sağlar.
Bir Adapter ise aslında UI bileşenleri ile verileri UI Bileşenine dolduran veri kaynağı arasında köprü kurar. Adapter verileri tutar ve verileri Adapter View’e gönderir, View ise Adapter View’den verileri alabilir ve verileri Spinner,ListView, GridView vb. gibi farklı görünümlerde gösterir.
ListView ve GridView, AdapterView’ın alt sınıflarıdır ve bunları harici bir kaynaktan veri alan ve her veri girişini temsil eden bir Görünüm oluşturan bir Adapter’e bağlayarak doldurulabilirler.
Android, bir AdapterView (yani ListView veya GridView) için farklı türde verileri almak ve görünümler oluşturmak için yararlı olan çeşitli Adapter alt sınıfları sağlar. Yaygın adaptörler ArrayAdapter, BaseAdapter, CursorAdapter, SimpleCursorAdapter, SpinnerAdapter ve WrapperListAdapter‘dır. Her iki adaptör için ayrı örnekler göreceğiz.
Aşağıda en yaygın olarak kullanılan ana özelliklerden bazıları verilmiştir:
| Özellik | Tanımı |
|---|---|
android:id | Bu, düzeni benzersiz olarak tanımlayan kimliktir. |
android:divider | Bu özelliği kullanarak Liste öğeleri arasında bir ayırıcı belirleyebiliriz. Bu öznitelik için bir çizilebilir veya herhangi bir renk değer olarak belirtilebilir. |
android:dividerHeight | Ayırıcının yüksekliğini belirtmek için kullanılır. |
android:entries | ListView’i dolduracak bir dizi kaynağına başvuruyu belirtir. |
android:footerDividersEnabled | false olarak ayarlandığında, ListView her altbilgi görünümünden önce ayırıcıyı çizmez. Varsayılan değer true olarak tanımlanır. |
android:headerDividersEnabled | false olarak ayarlandığında, ListView her başlık görünümünden sonra ayırıcıyı çizmez. Varsayılan değer true olarak tanımlanır. |
Aşağıda, XML düzenini kullanarak android uygulamanıza nasıl ListView ekleyebileceğinizi gösterdik.
1 2 3 4 5 6 7 8 | <ListView android:id="@+id/listView" android:layout_width="match_parent" android:layout_height="match_parent" android:divider="@android:color/black" android:dividerHeight="1dp"/> |
ListView’de Kullanılan Adapter Sınıfları
Adapter, UI bileşeni ile veri kaynağı arasında, UI bileşenindeki verileri doldurmamıza yardımcı olan bir köprüdür. Verileri tutar ve verileri Adapter View’e gönderir, ardından View, verileri Adapter Viewden alır ve verileri ListView, GridView, Spinner vb. gibi farklı görünümlerde gösterir.
ListView, AdapterView’ın bir alt sınıfıdır ve verileri harici bir kaynaktan alan ve her veri girişini temsil eden bir View oluşturan bir Adapter’e bağlanarak doldurulabilir.
Android’de yaygın olarak kullanılan adaptörler şunlardır:
- Array Adapter
- Base Adapter
Şimdi bu adaptörleri açıklayalım:
Array Adapter
Bir array tarafından desteklenen tek bir öğe listeniz olduğunda, ArrayAdapter’ı kullanabilirsiniz. Örneğin, telefon kişileri, ülkeler veya adların listesi.
Önemli Not: Varsayılan olarak, ArrayAdapter tek bir TextView ile bir Layout bekler, Daha karmaşık görünümler kullanmak istiyorsanız, liste öğelerinde daha fazla özelleştirme anlamına gelir, lütfen ArrayAdapter’dan kaçının ve özel adaptörler kullanın.
Array Adapter kodu aşağıdadır:
Java
1 2 3 | ArrayAdapter adapter = new ArrayAdapter<String>(this,R.layout.ListView,R.id.textView,StringArray); |
Kotlin
1 2 3 | var arrayAdapter:ArrayAdapter<String> = ArrayAdapter(this,R.layout.activity_listview, R.id.textView, gunler) |
Array Adapter Örnek Uygulama:
Aşağıdaki örnekte haftanın günlerini bir ListView içinde göstermeyi hedefliyoruz. ListView içinde sadece günler olacağı için adatörü Array Adapter olarak seçiyoruz. Aşağıdaki adımları izleyerek örneği hazırlayalım.
Adım 1: İlk olarak ListView içinde kullanacağımız şablonu oluşturuyoruz. activity_listview.xml isimli bir tane düzen oluşturup aşağıdaki kodları yazın. @id değeri textView olan bir tane TextView nesnesi ekliyoruz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/textView" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center" android:padding="5dp" android:text="14dp" android:textColor="@color/black" /> </LinearLayout> |
Adım 2: activity_main.xml dosyasını açıp aşağıdaki gibi düzenleyin. @id değeri listView olan bir tane ListView nesnesi ekliyoruz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <?xml version="1.0" encoding="utf-8"?> <RelativeLayout android:id = "@+id/mainLayout" xmlns:android = "http://schemas.android.com/apk/res/android" xmlns:app = "http://schemas.android.com/apk/res-auto" xmlns:tools = "http://schemas.android.com/tools" android:layout_width = "match_parent" android:layout_height = "match_parent" tools:context=".MainActivity"> <ListView android:id="@+id/listView" android:layout_width="match_parent" android:layout_height="match_parent" android:divider="@android:color/black" android:dividerHeight="1dp"/> </RelativeLayout> |
Adım 3: Şimdi bu son adımda, gün adlarını kullanıcı arayüzünde görüntülemek için ArrayAdapter kullanacağız. MainActivity.java ve MainActivity.kt kodu aşağıdadır.
Java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | package com.example.tasarimkodlama; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.widget.ArrayAdapter; import android.widget.ListView; public class MainActivity extends AppCompatActivity { ListView listView; String gunler[] = {"Pazartesi", "Salı", "Çarşamba", "Perşembe", "Cuma", "Cumartesi", "Pazar"}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listView = (ListView)findViewById(R.id.listView); ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, R.layout.activity_listview, R.id.textView, gunler); listView.setAdapter(arrayAdapter); } } |
Kotlin
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | package com.example.tasarimkodlama import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.widget.ArrayAdapter import android.widget.ListView class MainActivity : AppCompatActivity() { lateinit var listview:ListView var gunler = arrayOf("Pazartesi", "Salı", "Çarşamba", "Perşembe", "Cuma", "Cumartesi", "Pazar") override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) title = "Merhaba Dünya" listview = findViewById(R.id.listView) var arrayAdapter:ArrayAdapter<String> = ArrayAdapter(this,R.layout.activity_listview, R.id.textView, gunler) listview.adapter = arrayAdapter } } |
Array Adapter ile Custom Adapter kullanan ListView Örneği (Java ve Kotlin)
Bu örnekte profil resimlerine sahip kişileri isimleri ile listeleyen özel bir adapter kullanacağız.
Adım 1: Yeni bir android projesi oluşturun. Burada LinearLayout‘ta bir ListView oluşturacağız. activity_main.xml veya list_item.xml düzenleri ve kodları aşağıdadır.
activity_main.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <?xml version="1.0" encoding="utf-8"?> <LinearLayout android:id = "@+id/mainLayout" xmlns:android = "http://schemas.android.com/apk/res/android" xmlns:app = "http://schemas.android.com/apk/res-auto" xmlns:tools = "http://schemas.android.com/tools" android:layout_width = "match_parent" android:layout_height = "match_parent" android:orientation="vertical" tools:context=".MainActivity"> <ListView android:id="@+id/listViewKisiler" android:layout_width="match_parent" android:layout_height="match_parent" android:divider="@android:color/black" android:dividerHeight="1dp" /> </LinearLayout> |
list_item.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" android:padding="8dp"> <ImageView android:id="@+id/profil" android:layout_width="100dp" android:layout_height="100dp" android:src="@drawable/ic_launcher_foreground" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <TextView android:id="@+id/tvAd" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="İsim" android:layout_margin="10dp" android:textSize="30dp" android:textColor="@color/black" /> <TextView android:id="@+id/tvDogum" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="yyyy.aa.gg" android:layout_margin="5dp" android:textSize="15dp" android:textColor="@color/teal_700" /> </LinearLayout> </LinearLayout> |
list_item.xml düzeni aşağıdaki gibi oluşacaktır.

Kişi bilgilerini tutmak için Kisi adında bir tane Java sınıfı oluşturuyoruz. Bu sınıfı kullanarak örnek kişileri tutan bir adapter oluşturacağız.
Kisi.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | public class Kisi { private String isim; private int resimID; private String dogum; public Kisi(String isim, int resimID, String dogum) { this.isim = isim; this.resimID = resimID; this.dogum = dogum; } public String getIsim() { return isim; } public void setIsim(String isim) { this.isim = isim; } public int getResimID() { return resimID; } public void setResimID(int resimID) { this.resimID = resimID; } public String getDogum() { return dogum; } public void setDogum(String dogum) { this.dogum = dogum; } } |
Kisi.kt
1 2 3 | class Kisi(var isim: String, var resimID: Int, var dogum: String) |
(Kişisel notum olarak belirtmek isterim Java’dan Kotlin’e kod yazmak ne kadar basit görünse de yep yeni bir dil mimarisi can sıkıcı oldu. Bu örneği hazırlamam neredeyse bir günüme sebep oldu.)
Adım 3: Üçüncü adımda, MainActivity.java‘yı kodlayarak üye adlarını kullanıcı arayüzünde görüntülemek için özel adaptör kullanacağız. MainActivity.java kodu aşağıdadır.
Önemli Not: Üye resimlerinin res klasörünün içinde bulunan drawable klasörde doğru adlandırma ile saklandığından emin olun.
MainActivity içindeki onCreate() metodu içine aşağıdaki kodları ekliyoruz.
Java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | ListView lv=(ListView)findViewById(R.id.listViewKisiler); Kisi kisi1 =new Kisi("Ahmet",R.drawable.res1,"1978.01.01"); Kisi kisi2 =new Kisi("Hayri",R.drawable.res2,"1983.02.02"); Kisi kisi3 =new Kisi("Hüseyin",R.drawable.res3,"1984.04.04"); Kisi kisi4 =new Kisi("Ayşe",R.drawable.res4,"1980.06.06"); Kisi kisi5 =new Kisi("Fatma",R.drawable.res5,"1988.05.05"); Kisi kisi6 =new Kisi("Ufuk",R.drawable.res6,"1990.08.08"); ArrayList<Kisi> kisiler = new ArrayList<Kisi>(); kisiler.add(kisi1); kisiler.add(kisi2); kisiler.add(kisi3); kisiler.add(kisi4); kisiler.add(kisi5); kisiler.add(kisi6); CustomAdapter customAdapter = new CustomAdapter(this,R.layout.list_item,kisiler); lv.setAdapter(customAdapter); |
Kotlin
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | val lv = findViewById<View>(R.id.listViewKisiler) as ListView val kisi1 = Kisi("Ahmet", R.drawable.res1, "1978.01.01") val kisi2 = Kisi("Hayri", R.drawable.res1, "1983.02.02") val kisi3 = Kisi("Hüseyin", R.drawable.res1, "1984.04.04") val kisi4 = Kisi("Ayşe", R.drawable.res1, "1980.06.06") val kisi5 = Kisi("Fatma", R.drawable.res1, "1988.05.05") val kisiler = ArrayList<Kisi>() kisiler.add(kisi1) kisiler.add(kisi2) kisiler.add(kisi3) kisiler.add(kisi4) kisiler.add(kisi5) val customAdapter = CustomAdapter(this, R.layout.list_item, kisiler) lv.adapter = customAdapter |
Kotlinde setContentView(R.layout.activity_main) satırında hata alırsanız buradaki yazıya bir göz atın.
Yukarıda yapılanları inceleyelim. İlk olarak findViewById() metodu ile ListView kontrolünün bir örneğini aldık. Ardından 6 tane kişi oluşturup bunları ArrayList koleksiyonuna ekledik. Sondaki satırda ArrayAdapter sınıfını miras alan CustomAdapter sınıfını oluşturup bunu listView’e adapter olarak tanımladık.
Adım 4: Şimdi ArrayAdapter‘ı genişletecek başka bir Custom Adapter sınıfı oluşturacağız. CustomAdapter.java yada CustomAdapter.kt kodu aşağıdadır.
CustomAdapter.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | package com.example.tasarimkodlama; import android.content.Context; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.ImageView; import android.widget.TextView; import java.util.ArrayList; import androidx.annotation.NonNull; import androidx.annotation.Nullable; public class CustomAdapter extends ArrayAdapter<Kisi> { private Context context; int res; public CustomAdapter(@NonNull Context context, int resource, @NonNull ArrayList<Kisi> objects) { super(context, resource, objects); this.context = context; this.res= resource; } @NonNull @Override public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) { //return super.getView(position, convertView, parent); //kisi bilgileri getir String isim = getItem(position).getIsim(); int resimID = getItem(position).getResimID(); String dogum = getItem(position).getDogum(); //Bilgileri ile birlikte yeni bir kişi oluşturun Kisi kisi= new Kisi(isim,resimID,dogum); Log.d("Custom",Integer.toString(resimID)); LayoutInflater inflater = LayoutInflater.from(context); convertView = inflater.inflate(res,parent,false); TextView tvAd = convertView.findViewById(R.id.tvAd); TextView tvDogum = convertView.findViewById(R.id.tvDogum); ImageView profil = convertView.findViewById(R.id.profil); tvAd.setText(isim); tvDogum.setText(dogum); profil.setImageResource(resimID); return convertView; } } |
CustomAdapter.kt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.ArrayAdapter import android.widget.ImageView import android.widget.TextView class CustomAdapter(context: Context, private val res: Int, private val objects: List<Kisi>) : ArrayAdapter<Kisi>(context, res, objects) { override fun getItem(position: Int): Kisi? { return super.getItem(position) } override fun getView(position: Int, convertView: View?, parent: ViewGroup): View { var convertView = LayoutInflater.from(context).inflate(res, parent, false) var kisi: Kisi = this.getItem(position) as Kisi var tvAd: TextView = convertView.findViewById(R.id.tvAd) var tvDogum: TextView = convertView.findViewById(R.id.tvDogum) var profil: ImageView = convertView.findViewById(R.id.profil) tvAd.text=kisi.isim tvDogum.text =kisi.dogum profil.setImageResource(kisi.resimID) return convertView } } |
Şimdi Uygulamayı Emulator’da çalıştırın ve size kullanıcıların resimleri ile birlikte isimler ve doğum tarihlerini gösteren ListView örneği gösterilecektir.

Base Adapter
BaseAdapter, ListView‘de kullanılabilen bir Adapterın genel uygulamasının ortak bir temel sınıfıdır. Ne zaman özelleştirilmiş bir listeye ihtiyaç duyarsanız, kendi bağdaştırıcınızı yaratır ve bunun içindeki temel bağdaştırıcıyı genişletirsiniz. Temel Adapter, özel bir liste öğesini görüntülemek için özel bir Adapter oluşturmak üzere genişletilebilir. ArrayAdapter ayrıca BaseAdapter‘ın bir implimentasyonudur.
Yukarıdaki ArrayAdapter örneğine benzer şekilde bu adımlarda da BaseAdapter ile yukarıdaki örneği nasıl yapacağınızı göstereceğim. Bu yüzden yukarıdaki adımlara benzer şekilde aşağıdaki adımları gerçekleştireceğiz.
Adım 1: Yeni bir android projesi oluşturun. Burada LinearLayout‘ta bir ListView oluşturacağız. activity_main.xml veya list_item.xml düzenleri ve kodları aşağıdadır.
activity_main.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <?xml version="1.0" encoding="utf-8"?> <LinearLayout android:id = "@+id/mainLayout" xmlns:android = "http://schemas.android.com/apk/res/android" xmlns:app = "http://schemas.android.com/apk/res-auto" xmlns:tools = "http://schemas.android.com/tools" android:layout_width = "match_parent" android:layout_height = "match_parent" android:orientation="vertical" tools:context=".MainActivity"> <ListView android:id="@+id/listViewKisiler" android:layout_width="match_parent" android:layout_height="match_parent" android:divider="@android:color/black" android:dividerHeight="1dp" /> </LinearLayout> |
list_item.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" android:padding="8dp"> <ImageView android:id="@+id/profil" android:layout_width="100dp" android:layout_height="100dp" android:src="@drawable/ic_launcher_foreground" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <TextView android:id="@+id/tvAd" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="İsim" android:layout_margin="10dp" android:textSize="30dp" android:textColor="@color/black" /> <TextView android:id="@+id/tvDogum" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="yyyy.aa.gg" android:layout_margin="5dp" android:textSize="15dp" android:textColor="@color/teal_700" /> </LinearLayout> </LinearLayout> |
list_item.xml düzeni aşağıdaki gibi oluşacaktır.

Kişi bilgilerini tutmak için Kisi adında bir tane Java sınıfı oluşturuyoruz. Bu sınıfı kullanarak örnek kişileri tutan bir adapter oluşturacağız.
Kisi.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | package com.example.tasarimkodlama; public class Kisi { private String isim; private int resimID; private String dogum; public Kisi(String isim, int resimID, String dogum) { this.isim = isim; this.resimID = resimID; this.dogum = dogum; } public String getIsim() { return isim; } public void setIsim(String isim) { this.isim = isim; } public int getResimID() { return resimID; } public void setResimID(int resimID) { this.resimID = resimID; } public String getDogum() { return dogum; } public void setDogum(String dogum) { this.dogum = dogum; } } |
Kisi.kt
1 2 3 | class Kisi(var isim: String, var resimID: Int, var dogum: String) |
Adım 3: Üçüncü adımda, MainActivity.java‘yı kodlayarak üye adlarını kullanıcı arayüzünde görüntülemek için özel adaptör kullanacağız. MainActivity.java kodu aşağıdadır.
Önemli Not: Üye resimlerinin res klasörünün içinde bulunan drawable klasörde doğru adlandırma ile saklandığından emin olun.
MainActivity içindeki onCreate() metodu içine aşağıdaki kodları ekliyoruz.
Java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | ListView listView=(ListView)findViewById(R.id.listViewKisiler); Kisi kisi1 =new Kisi("Ahmet",R.drawable.res1,"1978.01.01"); Kisi kisi2 =new Kisi("Hayri",R.drawable.res2,"1983.02.02"); Kisi kisi3 =new Kisi("Hüseyin",R.drawable.res3,"1984.04.04"); Kisi kisi4 =new Kisi("Ayşe",R.drawable.res4,"1980.06.06"); Kisi kisi5 =new Kisi("Fatma",R.drawable.res5,"1988.05.05"); Kisi kisi6 =new Kisi("Ufuk",R.drawable.res6,"1990.08.08"); ArrayList<Kisi> kisiler = new ArrayList<Kisi>(); kisiler.add(kisi1); kisiler.add(kisi2); kisiler.add(kisi3); kisiler.add(kisi4); kisiler.add(kisi5); kisiler.add(kisi6); // Özel Adapter CustomAdapter adapter = new CustomAdapter(this, kisiler); // ListView'e Adapterı ekleme listView.setAdapter(adapter); |
Kotlin
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | val listView = findViewById<View>(R.id.listViewKisiler) as ListView val kisi1 = Kisi("Ahmet", R.drawable.res1, "1978.01.01") val kisi2 = Kisi("Hayri", R.drawable.res1, "1983.02.02") val kisi3 = Kisi("Hüseyin", R.drawable.res1, "1984.04.04") val kisi4 = Kisi("Ayşe", R.drawable.res1, "1980.06.06") val kisi5 = Kisi("Fatma", R.drawable.res1, "1988.05.05") val kisiler = ArrayList<Kisi>() kisiler.add(kisi1) kisiler.add(kisi2) kisiler.add(kisi3) kisiler.add(kisi4) kisiler.add(kisi5) // Özel Adapter val adapter = CustomAdapter(this, kisiler) // ListView'e Adapterı ekleme listView.adapter=adapter |
Adım 4: Şimdi ArrayAdapter‘ı genişletecek başka bir Custom Adapter sınıfı oluşturacağız. CustomAdapter.java kodu aşağıdadır.
CustomAdapter.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | package com.example.tasarimkodlama; import android.content.Context; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; import java.util.ArrayList; import androidx.annotation.NonNull; import androidx.annotation.Nullable; public class CustomAdapter extends BaseAdapter{ private Context context; //context private ArrayList<Kisi> kisiler; //list için veri kaynağı //public constructor public CustomAdapter(Context context, ArrayList<Kisi> kisiler) { this.context = context; this.kisiler = kisiler; } @Override public int getCount() { return kisiler.size(); } @Override public Object getItem(int i) { return kisiler.get(i); } @Override public long getItemId(int i) { return i; } @Override public View getView(int i, View view, ViewGroup viewGroup) { // inflate the layout for each list row if (view == null) { view = LayoutInflater.from(context). inflate(R.layout.list_item, viewGroup, false); } Kisi mevcutKisi = (Kisi) getItem(i); TextView tvAd = (TextView)view.findViewById(R.id.tvAd); TextView tvDogum = (TextView)view.findViewById(R.id.tvDogum); ImageView profil = (ImageView)view.findViewById(R.id.profil); tvAd.setText(mevcutKisi.getIsim()); tvDogum.setText(mevcutKisi.getDogum()); profil.setImageResource(mevcutKisi.getResimID()); return view; } } |
CustomAdapter.kt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.BaseAdapter import android.widget.ImageView import android.widget.TextView class CustomAdapter //public constructor (//context private val context: Context, //list için veri kaynağı private val kisiler: ArrayList<Kisi>) : BaseAdapter() { override fun getCount(): Int { return kisiler.size } override fun getItem(i: Int): Any { return kisiler[i] } override fun getItemId(i: Int): Long { return i.toLong() } override fun getView(position: Int, convertView: View?, parent:ViewGroup?): View? { var convertView: View? = convertView if (convertView == null) { convertView = LayoutInflater.from(context).inflate(R.layout.list_item, parent, false) } val mevcutKisi = getItem(position) as Kisi val tvAd = convertView?.findViewById<View>(R.id.tvAd) as TextView val tvDogum = convertView?.findViewById<View>(R.id.tvDogum) as TextView val profil = convertView?.findViewById<View>(R.id.profil) as ImageView tvAd.text = mevcutKisi.isim tvDogum.text = mevcutKisi.dogum profil.setImageResource(mevcutKisi.resimID) return convertView } } |
Şimdi Uygulamayı Emulator’da çalıştırın ve size kullanıcıların resimleri ile birlikte isimler ve doğum tarihlerini gösteren ListView örneği gösterilecektir.

Bu yazıda ArrayAdapter ve BaseAdapter sınıflarını kullanarak bir ListView öğesini nasıl dolduracağımız örneklerle gördük.
Android ListView Öğelerine Tıklama Olayı
Bazı durumlarda ListView öğerini tıklayıp başka View içinde göstermek isteyebiliriz. Aşağıdaki örnek kod MainActiviy içinde ID’si listView1 olan bir nesneye tıklandığında çalışacak kodları göstermektedir.
Örnek 1: ListView nesnesine tıkladığımızda başka bir Activity açmak için aşağıdaki gibi yazabilirsiniz. Aşağıdaki örnekte ListView‘e tıklandığında DetayActivity açılmaktadır.
1 2 3 4 5 6 7 8 9 10 11 12 13 | ListView listView1 = (ListView)findViewById(R.id.listView1); listView1.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { Intent intent = new Intent(MainActivity.this, DetayActivity.class); String mesaj = "örnek mesaj"; intent.putExtra("MESAJ", mesaj); startActivity(intent); } }); |
Örnek 2: ListView öğelerine tıklandığında ekrana Toast Mesaj uyarısı veren örnek uygulama
1 2 3 4 5 6 7 8 9 10 | ListView listView1 = (ListView)findViewById(R.id.listView1); listView1.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { Toast.makeText(getApplicationContext(),"ListView Öğesine Tıklandı", Toast.LENGTH_LONG).show(); } }); |
Daha fazla Android içeriği için Android Dersleri yazısını inceleyebilirsiniz.
Kaynak:











2 Yorum