Tasarım Kodlama

Adapter ve Adapter View Kullanımı

Adapter nesnesi, bir AdapterView ile bu görünüm için temel alınan veriler arasında bir köprü görevi görür. Adapter, veri öğelerine erişim sağlar. Adapter, veri kümesindeki her öğe için bir View oluşturmaktan da sorumludur.

AdapterView, bir bağdaştırıcıya yüklenen öğeleri görüntüleyen bir ViewGroup’tur. En yaygın bağdaştırıcı türü, dizi tabanlı bir veri kaynağından gelir.

Adapter ve Adapter View o kadar popülerdir ki, List öğeleri veya GridView öğeleri olan herhangi bir uygulamayı her gördüğünüzde, onun Adapter ve Adapter View kullandığını kesin olarak söyleyebilirsiniz.

Genel olarak, herhangi bir List veya GridView oluşturduğumuzda, veriler üzerinde yineleme yapmak için bir döngü kullanabileceğimizi ve ardından verileri list veya gridview oluşturmak için ayarlayabileceğimizi düşünüyoruz.

Ancak ya veriler 1 milyon üründen oluşan bir setse. O zaman bir döngü kullanmak sadece çok fazla zaman harcamakla kalmaz, uygulamayı yavaşlatır, ayrıca tüm çalışma zamanı belleğini tüketebilir.

Tüm bu sorunlar Adapter ve Adapter View kullanılarak çözülür.

Adapter and Adapter View Kullanımı

Adapter View, bir View nesnesidir ve tıpkı diğer herhangi bir arabirim widget’ını kullandığımız gibi kullanılabilir. Buradaki tek olay, kendi başına veri gösteremediğinden, kendisine içerik sağlamak için bir Adapter‘a ihtiyaç duymasıdır.

Adapter Nedir?

Adapter, veri kaynağı ile kullanıcı arabirimi arasında bir köprü görevi görür. Çeşitli veri kaynaklarından verileri okur, bunları View nesnelerine dönüştürür ve UI bileşenleri oluşturmak için bağlantılı Adaptör görünümüne sağlar.

Veri kaynağı veya veri kümesi bir Array nesnesi, bir List nesnesi vb. olabilir.

Diğer tüm bağdaştırıcı sınıflarının üst sınıfı olan BaseAdapter sınıfını genişleterek kendi Adapter sınıfınızı oluşturabilirsiniz. Android SDK ayrıca ArrayAdapter, SimpleAdapter vb. gibi bazı kullanıma hazır adaptör sınıfları sağlar.

Adapter View Nedir?

Bir Adapter View, bir Adapter tarafından kendisine sağlanan List veya Grid vb. biçimindeki büyük veri kümelerini verimli bir şekilde görüntülemek için kullanılabilir.

Verimli dediğimizde ne demek istiyoruz?

Adapter View, bellek ve CPU kullanımını çok düşük tutarken ve fark edilir bir gecikme olmadan Kullanıcı Arayüzünde milyonlarca öğe görüntüleme yeteneğine sahiptir. Farklı Bağdaştırıcılar bunun için farklı stratejiler izler, ancak Android SDK’da sağlanan varsayılan Adapter aşağıdaki püf noktalarını izler:

  • Yalnızca o anda ekranda olan veya ekranda olmak üzere olan View nesnelerini işler. Bu nedenle, veri kümeniz ne kadar büyük olursa olsun, Adapter View, ekran boyutuna bağlı olarak her zaman yalnızca 5 veya 6 veya belki 7 öğe yükleyecektir. Bu nedenle bellek tasarrufu sağlar.
  • Ayrıca, kullanıcı kaydırdıkça veri öğelerini doldurmak için önceden oluşturulmuş düzeni yeniden kullanır, dolayısıyla CPU kullanımından tasarruf sağlar.

Aşağıdaki içeriğe sahip bir String dizisi gibi bir veri kümeniz olduğunu varsayalım.

Şimdi, bir Adapter’ın yaptığı şey, bu diziden verileri alıp bu verilerden bir Görünüm oluşturması ve ardından bu Görünümü bir AdapterView’a vermesidir. AdapterView daha sonra verileri istediğiniz şekilde görüntüler.

Not: Adapter yalnızca verileri bir veri kaynağından alıp View’e dönüştürmekten ve ardından Adapter View’e iletmekten sorumludur. Böylece verileri yönetmek için kullanılır. AdapterView, verilerin görüntülenmesinden sorumludur.

Bu nedenle, verileri bir veritabanından veya ArrayList’ten veya başka bir veri kaynağından alabilir ve ardından bu verileri herhangi bir düzenlemede görüntüleyebilirsiniz. Dikey olarak (ListView) veya satır ve sütunlarda (GridView) veya açılır menüde (Spinners) vb. görüntüleyebilirsiniz.

Farklı AdapterView türleri vardır. Bunlardan bazılarına bir göz atalım:

ListView

Her görünümün listedeki bir önceki görünümün hemen altına yerleştirildiği dikey olarak kaydırılabilir bir görünüm koleksiyonu görüntüler.

GridView

GridView, öğeleri iki boyutlu, kaydırılabilir bir ızgarada görüntüleyen bir ViewGroup’tur.

Spinner

Spinner, bir dizi değerden bir değer seçmenin hızlı bir yolunu sağlar. Spinnere dokunmak, kullanıcının yeni bir tane seçebileceği diğer tüm mevcut değerleri içeren bir açılır menü görüntüler.

Her AdapterView, Adapter‘ı kullanmak için bazı yaklaşımlar kullanır. Bu yaklaşımı ilgili AdapterView eğitimlerinde tartışacağız. Ancak basit bir şekilde ArrayAdapter ve BaseAdapter kavramlarına değinip birer tane örnek verelim.


Adapter

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.

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

2 yorum