Merhaba Arkadaşlar,
mobilhanem.com üzerinden anlattığımız/yayınladığımız derslere androidde Custom ListView Yapımı ile devam ediyoruz.Uygulama yazarken genel olarak lazım olan bir yapıdır Listview yapısı.Amacı ise adı üstünde listeleme yapmaktır.Bizde bu dersimizde kolayca listview yapımını anlatacağız. Piyasadaki dersler genel olarak sadece TextView kullanılarak yapılmış. Ben bu dersi imageView ve textView’ı kullanarak hazırladım.
Uygulamayı kısaca anlatacak olursak,Türkiyedeki şehir listesini ve şehirler hakkında ufak bilgiler veren bir liste oluşturduk ve her şehrin belediyesinin logosunu Listview’ın başına ekledik.
Lafı uzatmadan direk uygulama kodlarına geçiyorum.Arkadaşlar her zamanki gibi kod üzerinde gerekli açıklamaları yapmaya çalıştım.
[wpdm_file id=20]Anasayfa.java
import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.Intent; import android.content.res.TypedArray; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemLongClickListener; import android.widget.ListView; import android.widget.AdapterView.OnItemClickListener; public class Anasayfa extends Activity { ListView list; //ListView referansı ListViewAdapter adapter; // adapter referansı private String[] sehir_adi;// şehir adlarını tutacak array private String[] sehir_plaka;// //şehir plakalarını tutacak array private String[] sehir_yuzolcumu;// şehir yüzölçümünü tutacak array private String[] sehir_telefon;// şehir telefon kodlarını tutacak array private TypedArray sehir_icon;// iconları tutacak array private int[] sehir_icon_int;// iconların resource id lerini tutacak array @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_anasayfa);//xmli bağladık sehir_adi =getResources().getStringArray(R.array.sehir_array); //sehir_adi arrayi değerini strings.xml içindeki arrayden alıyor sehir_plaka =getResources().getStringArray(R.array.plaka_array);//sehir_plaka arrayi değerini strings.xml içindeki arrayden alıyor sehir_yuzolcumu =getResources().getStringArray(R.array.yuzolcumu_array);//sehir_yuzolcumu arrayi değerini strings.xml içindeki arrayden alıyor sehir_telefon =getResources().getStringArray(R.array.telefon_array);//sehir_telefon arrayi değerini strings.xml içindeki arrayden alıyor sehir_icon = getResources().obtainTypedArray(R.array.icon_array);//sehir_icon arrayi değerini strings.xml içindeki arrayden alıyor sehir_icon_int = new int[sehir_icon.length()];//İconların resource idlerini tutacak arrayi oluşturuyoruz for(int i = 0;i<sehir_icon.length();i++){ sehir_icon_int[i] = sehir_icon.getResourceId(i, -1); //iconların resource id değerlerini atıyoruz } //sehir_icon arrayı içinde iconları tuttuğu için ramda fazla yer kaplıyor. //Artık onunla işimiz bittiği için arrayı silmiyoruz ama tuttuğu veriyi boşaltıyoruz //Bunu Android kendisi öneriyor sehir_icon.recycle(); list = (ListView) findViewById(R.id.sehirList);//list objesini oluşturuyorz //ListViewAdapter'e değerlerimizi gönderiyoruz adapter = new ListViewAdapter(this, sehir_adi, sehir_plaka, sehir_telefon,sehir_yuzolcumu, sehir_icon_int); list.setAdapter(adapter);//adı üstünde set ediyoruz list.setOnItemClickListener(new OnItemClickListener() {//list view e tıklanınca çalışır @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { //Burda item tıklandığında başka bir sayfayı açıyoruz //Açtığımız sayfa boş sadece göstermek amaçlı Intent i = new Intent(Anasayfa.this, SehirDetay.class); //Açtığımız activitiye değer göndermek istersek i.putExtra("sehir_adi", sehir_adi[position]);//position tıklanan listview in pozisyonu/sırası startActivity(i); } }); list.setOnItemLongClickListener(new OnItemLongClickListener() {//list view e uzun tıklanınca/basılınca çalışır. public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int pos, long id) { // TODO Auto-generated method stub AlertDialog.Builder builder = new AlertDialog.Builder(Anasayfa.this); builder.setCancelable(true); builder.setTitle("Uyarı"); builder.setInverseBackgroundForced(true); builder.setPositiveButton("Tamam", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); AlertDialog alert = builder.create(); alert.show(); return true; } }); } }
Burdaki listeleri string.xml dosyasında çektik.String.xml uzun bir dosya olduğu için paylaşmıyorum. Kaynak kodu indirip inceleyebilirsiniz. Anasayfa.java’da kısaca yapılanları anlatıcak olursak string.xml’den değerlerimizi(sehir adı,plaka,yüzölçümü,telefon kodu ve logo) alıyoruz ve arraylara atıyoruz.Bu değerleri ListViewAdapter.java’nın constructor’ına gönderip bir obje oluşturuyoruz.setadapter() fonksiyonu ile list’imize adapter’i set ediyoruz. Sonrasında ise listview itemlerine tıklanınca veya uzun basınca yapılcak işlemleri seçiyoruz.Tıklanınca yeni bir activity açıyoruz. Uzun basınca ise Alert basıyoruz. Siz burda silme işlemleri vs.. yapabilirsiniz.
ListViewAdapter.java
package com.mobilhanem.customlistviewkullanimi; 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; public class ListViewAdapter extends BaseAdapter { // Declare Variables Context context; String[] sehir_adi; String[] sehir_plaka; String[] sehir_telefon; String[] sehir_yuzolcumu; int[] sehir_icon_int; LayoutInflater inflater; //ListviewAdapter constructor //Gelen değerleri set ediyor public ListViewAdapter(Context context, String[] sehir_adi, String[] sehir_plaka, String[] sehir_telefon, String[] sehir_yuzolcumu, int[] sehir_icon_int) { this.context = context; this.sehir_adi = sehir_adi; this.sehir_plaka = sehir_plaka; this.sehir_telefon = sehir_telefon; this.sehir_yuzolcumu = sehir_yuzolcumu; this.sehir_icon_int = sehir_icon_int; } @Override public int getCount() { return sehir_adi.length; } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return 0; } public View getView(int position, View convertView, ViewGroup parent) { // Declare Variables TextView sehir_adi_textview; TextView sehir_plaka_textview; TextView sehir_telefon_textview; TextView sehir_yuzolcumu_textview; ImageView sehir_icon_imageView; inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); View itemView = inflater.inflate(R.layout.list_item_row, parent, false);//list_item_row dan yeni bir view oluşturuyoruz // oluşan itemviewin içindeki alanları Anasayfadan gelen değerler ile set ediyoruz sehir_adi_textview = (TextView) itemView.findViewById(R.id.sehir_adi); sehir_plaka_textview = (TextView) itemView.findViewById(R.id.sehir_plaka); sehir_telefon_textview = (TextView) itemView.findViewById(R.id.sehir_telefon); sehir_yuzolcumu_textview = (TextView) itemView.findViewById(R.id.sehir_yuzolcumu); sehir_icon_imageView = (ImageView) itemView.findViewById(R.id.sehir_icon); sehir_adi_textview.setText(sehir_adi[position]); sehir_plaka_textview.setText("Plaka :"+sehir_plaka[position]); sehir_telefon_textview.setText("Telefon Kodu:"+sehir_telefon[position]); sehir_yuzolcumu_textview.setText("Yüz Ölçümü"+sehir_yuzolcumu[position]); sehir_icon_imageView.setImageResource(sehir_icon_int[position]); return itemView; } }
ListViewAdapter.java da constructor’a gelen verileri önce set ediyoruz.Sonra setadapter() metodu çağırıldığında o verileri view’lere yerleştiriyoruz.
Bu dersimde anlatmak istediklerim bu kadar.Dediğim gibi kod üzerinde açıklama yapmaya çalıştım .Kısa bir ders oldu ama çok işinize yarıyacağını düşündüğüm bir ders.Aklınıza takılan, sormak yada eklemek istediğiniz bir konu olursa çekinmeden yorum bırakabilirsiniz. Bir dahaki dersimde Slider Menü yapımını anlatmaya çalışacağım.
Arkadaşlar destek için sayfamızı beğenmenizi rica ediyorum facebook.com/mobilhanem.Bir dahaki dersimize kadar kendinize iyi bakın.
0