Tasarım Kodlama

Android ListView Kullanımı

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, Base Adapter, 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:

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, ülke adlarını kullanıcı arayüzünde görüntülemek için ArrayAdapter kullanacağız. MainActivity.java kodu aşağıdadır.

Array Adapter ile Custom Adapter kullanan ListView Örneği

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

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.

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 kodu aşağıdadır.

Ş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

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.

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.

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

1 yorum