package com.example.adapters; import java.util.ArrayList; import com.example.fragmentornegi.R; import android.content.Context; import android.util.Log; 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 SunumAdapter extends BaseAdapter { Context ctx; ArrayList<SunumSinif> alSunumlar = new ArrayList<SunumSinif>(); ArrayList<SunumSinif> alHD = null; ArrayList<SunumSinif> alPD = null; ArrayList<SunumSinif> alNC = null; ArrayList<SunumSinif> alRP = null; LayoutInflater inf; public SunumAdapter(Context _ctx) { ctx = _ctx; inf = LayoutInflater.from(_ctx); } public void Ekle(SunumSinif _sunum) { if (_sunum.AitOlduguKonu == SunumSinif.KonuHD) { if (alHD == null) alHD = new ArrayList<SunumSinif>(); alHD.add(_sunum); } else if (_sunum.AitOlduguKonu == SunumSinif.KonuNC) { if (alNC == null) alNC = new ArrayList<SunumSinif>(); alNC.add(_sunum); } else if (_sunum.AitOlduguKonu == SunumSinif.KonuPD) { if (alPD == null) alPD = new ArrayList<SunumSinif>(); alPD.add(_sunum); } else { if (alRP == null) alRP = new ArrayList<SunumSinif>(); alRP.add(_sunum); } alSunumlar.add(_sunum); } @Override public int getCount() { Log.w("Adapter", "getCount:int"); return alSunumlar.size(); } @Override public Object getItem(int position) { Log.w("Adapter", "getItem:Object"); return alSunumlar.get(position); } @Override public long getItemId(int position) { Log.w("Adapter", "getItemId:long"); return 0; } public static SunumAdapter getAdapter(Context _ctx) { SunumSinif HD1 = new SunumSinif(); HD1.AitOlduguKonu = SunumSinif.KonuHD; HD1.Baslik = "Hemodiyaliz Sunum 1"; HD1.Tipi = SunumSinif.SunumTipleri.Resim; HD1.DosyaYolu = "file:///android_asset/hd1/"; SunumSinif HD2 = new SunumSinif(); HD2.AitOlduguKonu = SunumSinif.KonuHD; HD2.Baslik = "Hemodiyaliz Sunum 2"; HD2.Tipi = SunumSinif.SunumTipleri.Resim; HD2.DosyaYolu = "file:///android_asset/hd2/"; SunumSinif HD3 = new SunumSinif(); HD3.AitOlduguKonu = SunumSinif.KonuHD; HD3.Baslik = "Hemodiyaliz Sunum 3"; HD3.Tipi = SunumSinif.SunumTipleri.Resim; HD3.DosyaYolu = "file:///android_asset/hd3/"; SunumSinif HD4 = new SunumSinif(); HD4.AitOlduguKonu = SunumSinif.KonuHD; HD4.Baslik = "Hemodiyaliz Sunum 4"; HD4.Tipi = SunumSinif.SunumTipleri.Resim; HD4.DosyaYolu = "file:///android_asset/hd4/"; SunumSinif HDhtml1 = new SunumSinif(); HDhtml1.AitOlduguKonu = SunumSinif.KonuHD; HDhtml1.Baslik = "Ayı Videolu HTML"; HDhtml1.Tipi = SunumSinif.SunumTipleri.Html; HDhtml1.DosyaYolu = "file:///android_asset/hdHtml1/index.html"; SunumAdapter sa = new SunumAdapter(_ctx); sa.Ekle(HD1); // sa.Ekle(HD2); // sa.Ekle(HD3); // sa.Ekle(HD4); // sa.Ekle(HDhtml1); return sa; } static class ViewHolder { TextView tvBaslik; TextView tvKonu; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; Log.w("Adapter", "getView:View"); if (convertView == null) { convertView = inf.inflate(com.example.fragmentornegi.R.layout.sunum_satir, null); holder = new ViewHolder(); convertView.setTag(holder); holder.tvBaslik = (TextView) convertView.findViewById(R.id.tvBaslik); holder.tvKonu = (TextView) convertView.findViewById(R.id.tvKonu); } else { holder = (ViewHolder) convertView.getTag(); } holder.tvBaslik.setText(alSunumlar.get(position).Baslik); holder.tvKonu.setText(alSunumlar.get(position).AitOlduguKonu); return convertView; } }
Eklemek istediğim şey ise, event sırası ve adediydi.
Ama önce aşağıdaki statik sınıfı neden yarattığımızı(bak aklıma ne geldi, yarattık dedi diye Allah'a -haşa rakip değil kimse ama- kafir ilan ederdik milleti, bence kelimeyi kutsallaştırmak en tehlikelisi, neyse konuya döneyim)anlatayım. ListView içinde satır sayısı çok olacaksa sürekli findViewById ile satır elemanlarını bulmak yerine statik bir sınıfa bu elemanları bağlamak ideal olanı (bkz static sınıf tanımlanması). Adapter sınıfımız içindeki ViewHolde static sınıfından türettiğimiz her nesne, static sınıfın bellekte tanımlı aynı yerine işaret edeceği için bileşenleri bulup bu static sınıf nesnesine atıyoruz ve böylece her View(liste satırı) oluştururken tekrar tekrar findViewById işlemi yapmıyoruz.
static class ViewHolder { TextView tvBaslik; TextView tvKonu; }Sınıf hazır ve getView içerisinde holder isminde değişken yaratıp eğer containerView boş ise değerini oluşturuyor değilse View sınıfının setTag metoduyla daha önce oluşturup atadığımız holder metodundan çekiyor ve satır bileşenlerinin değerlerini atıyoruz.
İlk yüklemede
getCount
metoduna 4 kez giriyor ve peşine getView
metodu ve bir kez daha getCount
ve getView
daha.Dokunduktan sonra ise
getItem
ve 3 kez getCount
ardından iki kez getItemId
.Ekran görüntüsü ise: