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