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