Android 非常好用的万能BaseAdapter

来源:互联网 发布:vb正则表达式在线测试 编辑:程序博客网 时间:2024/05/19 23:11

    在打代码过程中,越来越发现封装的重要性。于是,封装了一个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();}    }@Overridepublic int getCount() {return data!=null?data.size():0;}@Overridepublic T getItem(int position) {return data.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic 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;}    }}
1 0
原创粉丝点击