Aklımda Kalası Kelimeler

* давайте работать вместе
* Zarf ve Mazruf, Zerafet(xHoyratlık) ile aynı kökten(za-ra-fe) gelir
* Bedesten
* Suç subuta ermiştir - Suç sabit olmuştur

14 Mart 2013 Perşembe

BaseAdapter içinde işlenen sıralı metotlar

Daha önce bu yazımı okuyabilirsiniz: En Temel Generic Adapter


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: