在打代码过程中,越来越发现封装的重要性。于是,封装了一个BaseAdapter的基类,省去了每次重写BaseAdapter要做的凡庸,冗余的代码。
这个类可以省去自己写Viewholder,也可以在不确定数据源,item时,继承我写的这个基类即可轻松为适配器类型的控件写出适配器,下面就是示例代码:
public abstract class AllPowerAdapter<T> extends BaseAdapter {
private List<T> data;
private LayoutInflater inflater;
private int layoutId;
public AllPowerAdapter(Context context,List<T> data, int layoutId) {
inflater= (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
this.layoutId = layoutId;
if (data==null){
this.data=new ArrayList<>();
}else{
this.data = data;
}
}
public void updateRes(List<T> data){
if (data!=null&&data.size()>0){
this.data.clear();
this.data.addAll(data);
notifyDataSetChanged();
}
}
public void addRes(List<T> data){
if (data!=null&&data.size()>0){
this.data.addAll(data);
notifyDataSetChanged();
}
}
@Override
public int getCount() {
return data!=null?data.size():0;
}
@Override
public T getItem(int position) {
return data.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder vh=null;
if (convertView==null){
convertView=inflater.inflate(layoutId,parent,false);
vh=new ViewHolder(convertView);
convertView.setTag(vh);
}else{
vh= (ViewHolder) convertView.getTag();
}
bindData(vh,getItem(position));
return convertView;
}
public abstract void bindData(ViewHolder vh,T t);
protected static class ViewHolder{
private View layout;
private Map<Integer,View> cacheView=new HashMap<>();
public ViewHolder(View convertView) {
layout = convertView;
}
public View getView(int resId){
View view=null;
if (cacheView.containsKey(resId)){
view=cacheView.get(resId);
}else{
view=layout`
findViewById(resId);
cacheView.put(resId,view);
}
return view;
}
}
}