Android 非常好用的萬能BaseAdapter

    在打代碼過程中,越來越發現封裝的重要性。於是,封裝了一個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;
}
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章