Giriş
Şu satırı dahil ederiz.
Şöyle yaparız.
Şöyle yaparız.
1. Metoda geçilen view null ise yeni bir nesne yaratılır.
Satır için kullanılan xml'in şöyle bir şey olduğunu varsayalım.
getTag metodu
getTag çok sütunlu listeler için kullanılıyorsa her bir sütuna erişmek için kullanılır. Şöyle bir sınıf tanımlarız.
Şu satırı dahil ederiz.
import android.widget.BaseAdapter;
Bu sınıf bir ListView ile beraber kullanılır. Sınıfı şöyle kalıtırızpublic class MyCustomAdapter extends BaseAdapter {
Context context;
ArrayList<String> brands;
public AdapterListView(ArrayList<String> brands, Context context) {
this.brands = brands;
this.context = context;
}
@Override
public int getCount() {
return brands.size();
}
@Override
public Object getItem(int i) {
return null;
}
@Override
public long getItemId(int i) {
return 0;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
...
return view;
}
}
getCount metoduŞöyle yaparız.
@Override
public int getCount() {
return list.size();
}
getItem metoduŞöyle yaparız.
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
getViewMetodu1. Metoda geçilen view null ise yeni bir nesne yaratılır.
@Override
public View getView(int position, View view, ViewGroup parent){
if (view == null){
//Burada LayoutInflater ile bir view nesnesi yarat
}
return view;
}
Yeni bir nesne yaratmak için şu iki yöntem kullanılabilir.LayoutInflater inflater = getLayoutInflater();
view = inflater.inflate(R.layout.row, null);
veyaview= LayoutInflater.from(context).inflate(R.layout.activity_listview,null);
2. Daha sonra view nesnesine veri atanır. Atama işlemi için view nesnesi gerçek nesneye cast edilir.Satır için kullanılan xml'in şöyle bir şey olduğunu varsayalım.
/*********************row.xml **************/
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent" android:layout_height="match_parent"
android:padding="10dip" >
<TextView android:id="@+id/Name"
android:layout_height="wrap_content" android:layout_width="match_parent"
android:layout_marginLeft="25dp" />
</LinearLayout>
Bu durumda her satırda Name isimli bir TextView olacaktır.TextView tv=(TextView)view.findViewById(R.id.Name);
tv.setText(brands.get(i));
Bir başka örnek((TextView) view.findViewById(R.id.Name)).setText("...");
3. Eğer satır bir çok bileşenden oluşuyorsa bir holder kullanılır. Önce bir holder tanımlarız. Şöyle yaparız.public class ViewHolder{
TextView tvId,tv1,tv2,tv3,tv4,tv5;
}
Daha sonra yeni satır için holder yaratılır. Mevcut satır için holder alınır. Holder doldurulur ve view ile döndürülür. Şöyle yaparız.@Override
public View getView(int position, View v, ViewGroup parent) {
final ViewHolder holder;
if (v == null){
holder = new ViewHolder();
v = layoutInflater.inflate(R.layout.data_item, null);
holder.tvId = (TextView) v.findViewById(R.id.txtID);
holder.tv1 = (TextView) v.findViewById(R.id.txt1);
holder.tv2 = (TextView) v.findViewById(R.id.txt2);
holder.tv3 = (TextView) v.findViewById(R.id.txt3);
holder.tv4 = (TextView) v.findViewById(R.id.txt4);
holder.tv5 = (TextView) v.findViewById(R.id.txt5);
v.setTag(holder);
}else{
holder = (ViewHolder) v.getTag();
}
holder.tvId.setText(actorsList.get(position).getId());
holder.tv1.setText(list.get(position).get1());
holder.tv2.setText(list.get(position).get2());
holder.tv3.setText(list.get(position).get3());
holder.tv4.setText(list.get(position).get4());
holder.tv5.setText(list.get(position).get5());
return v;
}
4. Eğer istenirse arka plan rengi de değiştirilebilir.if (view == null) {
view = layoutInflater.inflate(R.layout.list_ld_requirements, null);
...
}
view.setBackgroundColor(Color.parseColor("#E5E5E5"));
getTag metodu
getTag çok sütunlu listeler için kullanılıyorsa her bir sütuna erişmek için kullanılır. Şöyle bir sınıf tanımlarız.
static class ViewHolder {
TextView headlineView;
TextView reporterNameView;
TextView reportedDateView;
public TextView ldstatusView;
public TextView ldtype;
public TextView ldsource;
public TextView req;
}
Daha sonra bu sınıfı setTag metodu ile her satıra atarız.public View getView(int position, View view, ViewGroup parent) {
ViewHolder holder;
if (view == null) {
view = layoutInflater.inflate(R.layout.list_ld_requirements, null);
holder = new ViewHolder();
holder.headlineView = (TextView) convertView.findViewById(R.id.sbu);
holder.reporterNameView = (TextView) convertView.findViewById(R.id.bu);
holder.reportedDateView = (TextView) convertView.findViewById(R.id.sbuu);
holder.ldstatusView = (TextView) convertView.findViewById(R.id.sc);
holder.ldtype=(TextView)convertView.findViewById(R.id.ssc);
holder.ldsource=(TextView)convertView.findViewById(R.id.rq);
view.setTag(holder);
} else {
holder = (ViewHolder) view.getTag();
}
holder.headlineView.setText("...");
holder.reportedDateView.setText("...");
holder.ldstatusView.setText("...");
holder.ldtype.setText("...");
holder.ldsource.setText("...");
return convertView;
}
Hiç yorum yok:
Yorum Gönder