Android

Android ListView Kullanımı (Java ve Kotlin)

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:

ÖzellikTanımı
android:idBu, düzeni benzersiz olarak tanımlayan kimliktir.
android:dividerBu ö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:dividerHeightAyırıcının yüksekliğini belirtmek için kullanılır.
android:entriesListView’i dolduracak bir dizi kaynağına başvuruyu belirtir.
android:footerDividersEnabledfalse 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:headerDividersEnabledfalse 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.

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

Kotlin

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.

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.

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

Kotlin

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

list_item.xml

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

Kisi.kt

(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

Kotlin

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

CustomAdapter.kt

Ş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.

Array Adapter ile Custom Adapter kullanan ListView Örneği

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

list_item.xml

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

Kisi.kt

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

Kotlin

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

CustomAdapter.kt

Ş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.

Array Adapter ile Custom Adapter kullanan ListView Örneği

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.

Örnek 2: ListView öğelerine tıklandığında ekrana Toast Mesaj uyarısı veren örnek uygulama

Daha fazla Android içeriği için Android Dersleri yazısını inceleyebilirsiniz.

Kaynak:

https://alex-schnabl.medium.com/kotlin-listview-with-custom-baseadapter-and-api-integration-9a9ee7d2f1ad

2 Yorum

Yorum yapmak için tıklayın