仿RecycleView.Adapter封装BaseAdapter
2017-03-20 02:09
176 查看
》代码:
/** * Created by Kvin on 2017/1/15. */ public abstract class BasicAdapter<V extends BasicAdapter.ViewHolder, T> extends android.widget.BaseAdapter { protected final static String IMAGE_PREFIX = "file:///"; private List<T> list; private Context context; private LayoutInflater inflater; protected OnChildClickListener mOnChildClickListener; public BasicAdapter(List<T> list, Context context) { this.list = list; this.context = context; this.inflater = LayoutInflater.from(context); } @Override public int getCount() { return list == null ? 0 : list.size(); } @Override public Object getItem(int position) { return list == null ? null : list.get(position); } @Override public long getItemId(int position) { return position; } /** * v can be a view or a viewHolder * * @return * @explain_1:inflater,parent,context use for inflate layout * @explain_2:list,position use for choosing layout */ @Override public View getView(int position, View convertView, ViewGroup parent) { V v; if (convertView == null) { convertView = getConvertView(inflater, parent, context, list, position); v = initView(convertView, parent, context); convertView.setTag(v); } else { v = (V) convertView.getTag(); } bindData(v, position, list, context); return convertView; } /** * child view click listener * @param mOnChildClickListener */ public void setOnChildClickListener(OnChildClickListener mOnChildClickListener) { this.mOnChildClickListener = mOnChildClickListener; } /** * getConvertView * * @param inflater * @param parent * @param context * @param list * @param position */ protected abstract View getConvertView(LayoutInflater inflater, ViewGroup parent, Context context, List<T> list, int position); /** * init view */ protected abstract V initView(View cv, ViewGroup parent, Context context); /** * bind data */ protected abstract void bindData(V vh, int position, List<T> list, Context context); /** * view holder */ public static class ViewHolder{ public ViewHolder(View v) { } } }
》使用样式:
/** * Created by Kvin on 2017/2/1. */ public class RobotAdapter extends BasicAdapter<RobotAdapter.ViewHolder, RobotBean> { public RobotAdapter(List<RobotBean> list, Context context) { super(list, context); } @Override protected View getConvertView(LayoutInflater inflater, ViewGroup parent, Context context, List<RobotBean> list, int position) { return inflater.inflate(R.layout.adapter_robot, parent, false); } @Override protected ViewHolder initView(View cv, ViewGroup parent, Context context) { return new ViewHolder(cv); } @Override protected void bindData(ViewHolder vh, int position, List<RobotBean> list, Context context) { RobotBean bean = list.get(position); ImageLoader.getInstance().displayImage(bean.getIcon(), vh.iconIv); vh.nameTv.setText(bean.getName()); } static class ViewHolder extends BasicAdapter.ViewHolder { ImageView iconIv; TextView nameTv; public ViewHolder(View v) { super(v); iconIv = (ImageView) v.findViewById(R.id.icon_iv); nameTv = (TextView) v.findViewById(R.id.name_tv); } } }
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件