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
BaseAdapter etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
BaseAdapter etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

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:

3 Ekim 2010 Pazar

En Temel Generic Adapter


Burada bir list aktivite kullanarak setAdapter metodu çağırıyoruz. ListView bileşeneni ayrı bir şekilde herhangi bir layout içinde kullandığınızda ve findViewById ile nesneyi yakaladığınızda da göreceksinizki onunda içinde setAdapter metodu var :) (Hiçbir şey büyülü değildir)

Sıfırdan bir adapter yapıyorsanız bunu türetmeniz gerektiğini bilmeniz lazım. Peki bu adapter ne iş yapıyor ?
Listeleyici adapterden kayıtları değil, listenin içinde görünecek satırların view halini ister. Satırları oluşturmak için veriyide türettiğiniz adapter sınıfı içine koymak işinizi kolaylar ama dışarıda da tutabilirsiniz. Sonuç olarak bilmelisiniz ki getView, getItemId, getCount metotları adapter tarafından ilk yükleme ve dokunma halinde çağırılan metotlardır.

Programın başlangıç noktası olan ListActivity:

package com.yeni.listAdapter;

import android.app.ListActivity;
import android.os.Bundle;

public class baslangicAktivitesi extends ListActivity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setListAdapter(new yeniAdapter(this));
}
}


Kendi Adapter sınıfımız BaseAdapter sınıfından türeyecek:
package com.yeni.listAdapter;

import android.content.Context;
import android.database.DataSetObserver;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.BaseAdapter;
import android.widget.LinearLayout;
import android.widget.TextView;

public class NewAdapter extends BaseAdapter {
private Context ctx;

public NewAdapter(Context _ctx) {
super();
ctx = _ctx;
}

@Override
public int getCount() {
return 3;
}

@Override
public Object getItem(int position) {
return null;
}

@Override
public long getItemId(int position) {
return 0;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
TextView tv = new TextView(ctx);
tv.setText("This text will be shown");
LinearLayout lila = new LinearLayout(ctx);
lila.addView(tv, new LinearLayout.LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

return lila;
}
}


Sonuç olarak, NewAdapter sınıfının içindeki getCount metodunun sonucu kadar getView metodu çağırılıyor ve oluşan View gösteriliyor.

BaseAdapter sınıfındaki getItem metodunu ezmezsek aşağıdaki sonuç olacak:


Çünkü:


Daha sonra bir incelememi daha yazıya döktüm: BaseAdapter içinde işlenen sıralı metotlar