继承BaseAdapter的抽象类(根据需求进行添加方法):
public abstract class MyBaseAdapter<T> extends BaseAdapter{
public List<T> list;
public Context context;
public MyBaseAdapter(Context context,List<T> list) {
this.list = list;
this.context = context;
}
@Override
public int getCount() {
return list != null ? list.size() : 0;
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
/**
*入口,第一步
*/
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//实现抽象方法创建ViewHolder,并返回ViewHolder执行getItemView方法返回的视图
return createViewHoler(position, convertView, parent).getItemView();
}
/**
* 创建ViewHolder的抽象方法
* @param position
* @param convertView
* @param parent
* @return
*/
public abstract ViewHolder createViewHoler(int position, View convertView, ViewGroup parent);
/**
* ViewHolder类
*/
public static class ViewHolder {
private View convertView;
//保存View的map
private HashMap<Integer, View> views;
private Context context;
/**
*第四步:ViewHolder的私有构造器
*/
private ViewHolder(Context context, View convertView) {
this.convertView = convertView;
this.views = new HashMap<>();
this.context = context;
//设置tag
convertView.setTag(this);
}
/**
*第三步:提供给外界获取ViewHolder的方法(使用优化重用布局)
*/
public static ViewHolder getHolder(View convertView, Context context, int layoutId, ViewGroup parent) {
if (convertView == null) {
LayoutInflater inflater = LayoutInflater.from(context);
convertView = inflater.inflate(layoutId, parent, false);
return new ViewHolder(context, convertView);
} else {
return (ViewHolder) convertView.getTag();
}
}
/**
* findById方法
* @param id
* @param <T>
* @return
*/
public <T extends View> T findById(int id) {
View view = views.get(id);
if (view == null) {
view = convertView.findViewById(id);
views.put(id, view);
} else {
view = views.get(id);
}
return (T) view;
}
/**
* 设置TextView文本方法
* @param id
* @param txt
*/
public void setText(int id, String txt) {
TextView tv = findById(id);
tv.setText(txt);
}
/**
* 返回整个视图
* @return
*/
public View getItemView() {
return convertView;
}
}
}
继承封装的适配器代码:
public class TestAdapter extends MyBaseAdapter{
private List<String> list;
protected Context context;
public TestAdapter(Context context, List<String> list) {
super(context, list);
this.list = list;
this.context = context;
}
/**
* 第二步
* @param position
* @param convertView
* @param parent
* @return
*/
@Override
public ViewHolder createViewHoler(int position, View convertView, ViewGroup parent) {
ViewHolder holder = ViewHolder.getHolder(convertView,context, R.layout.simple_fragment,parent);
//findById方法
TextView tv = holder.findById(R.id.tv_sp_fm);
//设置TextView文本方法
holder.setText(R.id.tv_sp_fm,list.get(position));
return holder;
}
}