上一篇介绍到MyAdapterVieHolder extends BaseAdapter这里,我还是每次写这个Adapter有点烦,我可不可以自定义一个BaseAdapter来减少代码量跟提高效率呢,想到了咱就来写一写吧,
自定义一个Adapter为 CommonAdapter.java
package com.utils;
import java.util.List;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
/**
* BaseAdapter 雏形
* @author Administrator
*
* @param <T>
*/
public abstract class CommonAdapter<T> extends BaseAdapter {
protected Context mContext;
protected List<T> mDatas;
protected LayoutInflater mInflater; //布局
public CommonAdapter(Context context,List<T>datas){
this.mContext = context ;
this.mInflater = LayoutInflater.from(context);
this.mDatas = datas;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return mDatas.size();
}
@Override
public Object 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 abstract View getView(int position, View convertView, ViewGroup parent);
}
而这样编写后的BaseAdapter当然要应用于MyAdapterViewHolder里啦,这里面的代码就简化为啦这样
package com;
import java.util.List;
import com.bean.Bean;
import com.example.universaladapter.R;
import com.utils.CommonAdapter;
import com.utils.ViewHolder;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
public class MyAdapterViewHolder extends CommonAdapter<Bean> {
public MyAdapterViewHolder(Context context,List<Bean>datas){
super(context, datas);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//初始化ViewHolder
ViewHolder holder = ViewHolder.get(mContext, convertView, parent, R.layout.item_listview, position);
Bean bean = mDatas.get(position);
TextView title = holder.getView(R.id.id_title);
title.setText(bean.getTitle());
TextView desc = holder.getView(R.id.id_desc);
desc.setText(bean.getDesc());
((TextView)holder.getView(R.id.id_time)).setText(bean.getTime());
((TextView)holder.getView(R.id.id_phone)).setText(bean.getPhone());
//注意convertView是在Holder初始化的 !!!!!!这是很重要
return holder.getmConvertView() ;
}
}
我日,现在一看有点小清新啊,爽多了有木有,然后我感觉在MyAdapterViewHolder中的getView中ViewHolder的创建几乎每次都是不变的,那我们可不可以再简化一下
简化后的代码
CommonAdapter.java
package com.utils;
import java.util.List;
import com.bean.Bean;
import com.example.universaladapter.R;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
/**
* BaseAdapter 雏形
* @author Administrator
*
* @param <T>
*/
public abstract class CommonAdapter<T> extends BaseAdapter {
protected Context mContext;
protected List<T> mDatas;
protected LayoutInflater mInflater; //布局
public CommonAdapter(Context context,List<T>datas){
this.mContext = context ;
this.mInflater = LayoutInflater.from(context);
this.mDatas = datas;
}
@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
ViewHolder holder = ViewHolder.get(mContext, convertView, parent, R.layout.item_listview, position);
convert(holder, getItem(position));
//注意convertView是在Holder初始化的 !!!!!!这是很重要
return holder.getmConvertView() ;
}
public abstract void convert(ViewHolder holder,T t);
}
而我们的MyAdapterViewHolder.java呢
package com;
import java.util.List;
import com.bean.Bean;
import com.example.universaladapter.R;
import com.utils.CommonAdapter;
import com.utils.ViewHolder;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
public class MyAdapterViewHolder extends CommonAdapter<Bean> {
public MyAdapterViewHolder(Context context,List<Bean>datas){
super(context, datas);
}
@Override
public void convert(ViewHolder holder, Bean bean) { ((TextView)holder.getView(R.id.id_time)).setText(bean.getTime());
((TextView)holder.getView(R.id.id_phone)).setText(bean.getPhone());
((TextView)holder.getView(R.id.id_title)).setText(bean.getTitle());
((TextView)holder.getView(R.id.id_desc)).setText(bean.getDesc());
}
}
一看,我日,这才几行代码啊,就是SetText啊,这么简单的话,我直接就不用重写一个类啊,直接在用Adapter的时候new出来就行啦,而且以后如果再用adapter的话,我也可以直接拿过来用,因为我的代码已封装好啦啊