打造通用Adapter(适用于ListView,GridView)
2015-07-14 21:08
483 查看
通用的ViewHolder
/** * 通用的ViewHolder * Created by Timor on 2015/4/25. */ public class ViewHolder { /** * 一个储存ID和控件的映射关系的容器 */ private SparseArray<View> mViews; private int mPosition; private View mConvertView; public ViewHolder(Context context, ViewGroup parent, int layoutId, int position) { this.mViews = new SparseArray<View>(); this.mPosition = position; this.mConvertView = LayoutInflater.from(context).inflate(layoutId, parent, false); mConvertView.setTag(this); } /** * 拿到一个ViewHolder对象 */ public static ViewHolder getHolder(Context context, View convertView, ViewGroup parent, int layoutId, int position) { if (convertView == null) { return new ViewHolder(context, parent, layoutId, position); } else { ViewHolder holder = (ViewHolder) convertView.getTag(); holder.mPosition = position; return holder; } } /** * 通过ID获取控件 */ public <T extends View> T getView(int viewId) { View view = mViews.get(viewId); if (view == null) { view = mConvertView.findViewById(viewId); mViews.put(viewId, view); } return (T) view; } public View getConvertView() { return mConvertView; } /** * 设置TextView内容 */ public ViewHolder setText(int viewId, String text) { TextView textView = getView(viewId); textView.setText(text); return this; } /** * 设置图片 */ public ViewHolder setImage(int viewId, int resId) { ImageView imageView = getView(viewId); imageView.setImageResource(resId); return this; } }
通用的Adapter
/** * 通用Adapter。 * 使用:继承CommonAdapter,然后重写convert,在该方法里完成数据到控件的映射。holder持有控件映射,item是数据bean。 */ public abstract class CommonAdapter<T> extends BaseAdapter { protected Context mContext; protected List<T> mDatas; protected LayoutInflater mInflater; protected int mItemLayoutId; public CommonAdapter(Context context, int itemLayoutId, List<T> datas) { this.mContext = context; this.mDatas = datas; this.mItemLayoutId = itemLayoutId; mInflater = LayoutInflater.from(context); } @Override public int getCount() { return mDatas.size(); } @Override public T getItem(int position) { return mDatas.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = ViewHolder.getHolder(mContext, convertView, parent, mItemLayoutId, position); convert(holder, getItem(position)); return holder.getConvertView(); } public abstract void convert(ViewHolder holder, T item); private ViewHolder getViewHolder(int position, View convertView, ViewGroup parent) { return ViewHolder.getHolder(mContext, convertView, parent, mItemLayoutId, position); } }
使用
mAdapter = new CommonAdapter<Conversation>(getActivity(), R.layout.view_item_conversation_list, mDatas) { @Override public void convert(ViewHolder holder, Conversation item) { holder.setText(R.id.tv_name, item.getName()) .setText(R.id.tv_msg, item.getMsg()) .setText(R.id.tv_time, item.getPostTime()); holder.setImage(R.id.iv_avatar, item.getAvatar()); } };
相关文章推荐
- Entity Framework 问题集锦
- UNIX环境高级编程-环境配置
- 求一个字符串中连续出现次数最多的子串
- xcode 生成framework的一个坑
- java io流类图
- 数据结构基础 图的遍历(三) 之 BFS+DFS(非递归实现)
- phpredis文档
- 阿西莫夫 - 神们自己(2015年6月23日)
- 1023. Have Fun with Numbers (20)
- javascript俄罗斯方块小游戏
- Python中time,datetime模块的常见使用方法
- Android Studio 如何通过gradle实现同一套代码的开发不同特性的apk
- Eclipse设置:背景与字体大小和xml文件中字体大小调整
- border-bottom-left-radius 属性
- hadoop文件系统浅析
- 钱、车、房、能力
- [MeetCoder] Crossing Bridge
- Scala中的 apply
- TJU-3852 Haitang1(其他)
- 烂泥:学习centos之快速搭建LNMP环境