Xamarin Android Listview Kullanımı

Xamarin Android Listview, Bu makalemizde android’de listeleme yapmak için kullanılan listview bileşeninden bahsedip bol örnek yapacağız ayrıca kendi özel adaptörümüzü ve özel lisview layout’umuzu nasıl oluşturacağımızıda görmüş olacağız.

Xamarin Android Listview Kullanımı

Xamarin Android ListView

ListView Bileşeni ve Adaptör Oluşturma

ListView bileşeninin liste elemanlarını grafiksel olarak son kullanıcıya göstermek için kullandığımızı söylemiştik. ArrayAdapter nesnesi ise ListView bileşenini beslemek için kullanılan ara bağlantı nesnesi olarak adlandırmak yanlış olmayacaktır. Zira ArrayAdapter nesnesi sadece veri seti ve bu veri setinin ListView bileşenine basıldığında oluşacak şablonu barındıran bir ara bağlantı nesnesidir. 4 adet elemanı bulunan basit bir liste oluşturalım.

Örnekleri oluştururken Visual Studio ide’sini kullanacağım bu yüzden anlatımlarımın bazı kısımlarında Visual Studio’da yapmanız gereken işlemlere değineceğim.

Visual Studio’da Xamarin Android projesi oluşturmak için Menüden File > New > Project (CTRL + Shift + N) açılan pencerede sol taraftaki listeden Installed > Templates > Visual C# > Android bu adımları doğru şekilde seçtiyseniz adı (Android) şeklinde biten örnek xamarin android projelerini göreceksiniz bizim şuan ihtiyacımız olan Blank App (Android) adlı şablondur o yüzden bu şablonu seçip projeyi oluşturunuz.

Projeyi oluşturduktan sonra MainActivity.cs adlı bir sınıf oluşturduğunu göreceksiniz bu sınıf Resource.Layout.Main adlı layout’a ait kod tarafıdır. Kod işlemlerini bu sınıf içerisinde fakat görsel işlemleri Resource.Layout.Main içerisinde gerçekleştireceğiz. Şimdi Main.axml ve MainActivity.cs adlı dosya içeriklerine gözatalım.

Main.axml(XML)

Varsayılan olarak oluşan Main.axml dosyasına ListView bileşenini ekleyip id’sini listView olarak değiştirdik.

MainActivity.cs(C#)

global list ve listView adında iki değişken tanımladık listView değişkenine layout’umuzda yer alan listView id’li bileşenimizi atıyoruz. daha sonra list adında string tipli liste değişkenine 4 eleman ekliyoruz.

Ardından listView değişkenimiz için gerekli olan ArrayAdapter nesnesini oluşturuyoruz ArrayAdapter nesnesinin contructor methodu parametrelerine sırasıyla Context(this) nesnesini atıyoruz, 2.parametreye oluşacak olan her bir satırın hangi tasarım şablonu ile oluşacağını belirtiyoruz biz burada android sdk’nin kendi varsayılan şablonunundan birini kullandık alttaki diğer örneğimizde özel listview görünümü oluşturmanın nasıl yapıldığınada gözatabilirsiniz.

Son olarak listView değişkenimizin Adapter özelliğine oluşturmuş olduğumuz adapter adlı değişkeni atıyoruz.

Ekran Görüntüsü

listview_ornek - Xamarin Listview


Özel ListView Görünümü Oluşturma

Android mobil platformu geliştiriciler için hâlihazırda 5-10 çeşit listview görünümünü sunmaktadır eğer bu görünüm ihtiyaçlarınızı karşılamıyor ise o zaman bu kısım sizi ilgilendiriyor olacak bu kısımda anlatılanlar ile ListView bileşeniniz için özel görünümler oluşturabileceksiniz.

MainActivity.cs(C#)

Eğer kendinize özel listview görünümleri oluşturacaksanız o zaman kendi adaptörünüzüde oluşturmalısınız üstteki kodda görüldüğü gibi MyListViewAdapter adında bir sınıfımız var ve bu sınıfı BaseAdapter<T> generic type’lı sınıftan miras aldık. Miras alma sonucunda bazı metodların dahil edilmesi konusunda bir hata alacaksınız bu metodları dahil etmelisiniz ve kendinize ihtiyacınıza görede bu metodların içeriğini düzenlemeniz gerekiyor. Şimdi MyListViewAdapter adlı sınıfımıza ait kodlara gözatalım

MyListViewAdapter.cs(C#)

Main.axml(XML)

listview_satir.axml(XML)

listview_satir.axml dosyası oluşturduğumuz MyListViewAdapter sınıfında kullanmak üzere oluştuduğumuz listview satır şablonudur. Kisi sınıfı içerisindeki Ad Soyas Yas Cinsiyet alanlarını yan yana olarak bastıracağız.

Ekran Görüntüsü

ozel_listview_ornek - Xamarin Listview


Click Listener İle Tıklama Olayını Yakalama

Yukarıdaki kodlara ek olarak OnCreate() metodu içerisine alttaki 2 satırı ekliyoruz ItemClick event’i listview’deki her bir satıra tıklama sonucu çalışmaktadır. ItemLongClick event’ide aynı şekilde listview’deki her bir item’a tıklama sonucu çalışıyor fakat uzun süre basılı tutunca bu event tetikleniyor arasındaki tek fark bu.

MainActivity.cs(C#)

Şimdi ise _listView_ItemClick ve _listView_ItemLongClick adlı event’lerin tanımlanmasına bakalım ve bu event’ler tetiklendiğinde ne yapıyoruz gözatalım.

MainActivity.cs(C#)

Yukarıda görüldüğü üzere listview’deki hangi elemana tıklandıysa e.Position ile ilgili kaydın index numarası alınıyor böylelikle tıklanmış olan kişiye bu index numarası ile ulaşabiliyoruz. kişi’yi aldıktan sonra her iki event metodunda aynı işlemi yapıyoruz sadece ekrana bastırdığımız içerik ayırt edebilmemiz için farklı örnek verecek olursak Murat ÖNER adlı liste elemanına bir defa tıkladıyıp bıraktığınızda ekrana Click: Murat ÖNER toast mesajı belirecektir ama uzun süre basılı tuttuğunuzda ise LongClick: 25 E yazacaktır. Alttaki örnek ekran görüntülerindede görebilirsiniz.

Ekran Görüntüsü

listview_item_basılı_tutma_olayı listview_item_tıklam_olayi

Xamarin Listview için yaptığımız ve diğer tüm örneklerin kodlarına ulaşmak için alttaki github bağlantısını ziyaret ediniz.

Github: https://github.com/muratoner/xamarin/tree/master/Xamarin ListView Kullanımı

Kaynak

Xamarin Android Listview

Bunlar da hoşunuza gidebilir...

3 Cevaplar

  1. özgür dedi ki:

    merhaba birşey sormak istiyorum itemclick ile ilgili olarak. Şimdi ben kendime bir listview oluşturdum ve bu bu listviewe eleman olarak alfabedeki harfleri ekledim.Daha sonra arama kısmı oluşturdum.Buraya kadar herşey çalışması gerektiği gibi örneğin ben örneğin C harfini aradığımda listview bana ekranda sadece C harfini getiriyor fakat ben C harfine tıkladıgım zaman bana A harfinin uyarısını ekrana getiriyor. e.Position bu şekilde işlemlerde işe yaramıyor bunun için ne yapabilirim.
    Teşekkürler.

    • Murat ÖNER dedi ki:

      Normal olarka a harfini getiriyordur çünkü siz c harfi ile aradığınız liste içerinde _liste[e.Position] gibi bir kullanım yapıyorsunuzdur yapmanız gereken _filtrelenmisListe[e.Position] şeklinde bir kullanım ile hangi elemana tıkladıysanız ilgili eleman getirilecektir bu arada _filtrelenmisListe değişkeni benim uydurduğum bir degisken adıdır siz arama sonrası filtrelenmis sonucu hangi field’a aktarıyorsanız ilgili filtrelenmiş fieldda e.Position değeri ile kayıta erişmelisiniz.

      • özgür dedi ki:

        Merhaba Murat Hocam; tekrar ben. Şimdi ise şurada takıldım.
        örneğin ben edittextler içeren form ile bir kayıtlar oluşturuyorum.
        örneğin ad özgür yas 20 gibi daha sonra bunu güncellemek istiyorum ad özgür yaş 21 diye fakat burada benim istediğim listedeki kayıtlara baksın bu kayıttan varsa yeni eklemek yerine var olanı güncellesin.
        Bunu nasıl yapabilirim?

Bir Cevap Yazın