(一)编写commonAdapter
写法如下:
public abstract class CommonAdapter<T> extends BaseAdapter{
protected Context mContext;
protected List<T> mDatas;
protected LayoutInflater minflater;
public CommonAdapter(Context context,List<T> data){
this.mContext=context;
this.mDatas=data;
this.minflater=LayoutInflater.from(context);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return mDatas.size();
}
@Override
public T getItem(int position) {
// TODO Auto-generated method stub
return mDatas.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent){
ViewHolder holder=ViewHolder.get(this.mContext, convertView, parent, R.layout.item_listview, position);
convert(holder,getItem(position));
return holder.getConvertView();
}
public abstract void convert(ViewHolder holder,T t);
//抽象方法,在子类中实现,对ViewHolder中组件的setText,setImageResource.
}
编写子类MyAdapter继承自commonAdapter
public class MyAdapter extends CommonAdapter<Bean> {
public MyAdapter(Context context,List<Bean> beans)
{
// TODO Auto-generated constructor stub
super(context,beans);
}
@Override
public void convert(ViewHolder holder, Bean bean) {
//TODO: 子类重写convert()方法,对组件设置文字和图片
((TextView)holder.getView(R.id.id_title)).setText(bean.getTitle());
((TextView)holder.getView(R.id.id_content)).setText(bean.getContent());
}
}
(三)进一步简化
在ViewHolder中封装为TextView,ImageView等组件赋值的方法。
public ViewHolder setText(int viewId,String text)
{
TextView tv=getView(viewId);
tv.setText(text);
return this;
}
public ViewHolder setImage(int viewId,int resId){
ImageView img_view=getView(viewId);
img_view.setImageResource(resId);
return this;
}
原来convert()方法中设置textView 的方法可以改写如下:
holder.setText(R.id.id_title, bean.getTitle());
(四)编写listView
mListView.setAdapter(new CommonAdapter<Bean>(MainActivity.this,mDatas) {
@Override
public void convert(ViewHolder holder, Bean t) {
// TODO Auto-generated method stub
holder.setText(R.id.id_title, t.getTitle())
.setText(R.id.id_content, t.getContent())
.setText(R.id.id_time, t.getTime())
.setText(R.id.id_phone, t.getPhone());
}
});