ListView/GridView适用的万能适配器
来源:互联网 发布:unity3d 网页插件下载 编辑:程序博客网 时间:2024/06/05 22:41
写在开头
首先,感谢洪洋大神对于此技术的分享。然后附带大神的原文章地址。想了解的小伙伴可以仔细查看(http://blog.csdn.net/lmj623565791/article/details/38902805)。
在此,我只是整理万能适配器的结果并剖析。如有说的不明白或者有误的地方欢迎指正和指导。
整理目的
通常在项目中会出现很多ListView、GridView,相应的根据不同的子条目就要写很多适配器。
为了简便和实用,整理了这个万能的适配器,以供使用。方便了许多~~~~
开始干货
ViewHolder
public class ViewHolder { //存储所有的子条目中的View private SparseArray<View> mDatas; //子条目的View private View convertView; private int position; /** * 构建方法-ViewHolder. * * @param context 上下文 * @param layoutId 布局文件 * @param parent 父类 */ public ViewHolder(Context context, int layoutId, int position, ViewGroup parent) { mDatas = new SparseArray<>(); convertView = LayoutInflater.from(context).inflate(layoutId, parent, false); convertView.setTag(this); } /** * 得到子条目的ViewHolder. * * @return */ public static ViewHolder getViewHolder(Context context, View convertView, int layoutId, int position) { if (convertView == null) { return new ViewHolder(context, layoutId, position, null); } else { ViewHolder holder = (ViewHolder) convertView.getTag(); holder.position = position; return holder; } } /** * 拿到相应的view. * * @param viewId view的ID * @return */ public View getView(int viewId) { //从集合中拿出相应的view View view = mDatas.get(viewId); if (view == null) { return convertView.findViewById(viewId); } else { return view; } } /** * 返回子条目的View. * * @return */ public View getConvertView() { return convertView; } /** * 获取位置 * @return */ public int getPosition() { return position; }}
CommonAdapter
public abstract class CommonAdapter<T> extends BaseAdapter { protected List<T> mDatas; private Context context; private int layoutId; public CommonAdapter(Context context, List<T> mDatas, int layoutId) { this.context = context; this.mDatas = mDatas; this.layoutId = layoutId; } @Override public T getItem(int i) { return mDatas.get(i); } @Override public int getCount() { return mDatas.size(); } @Override public long getItemId(int i) { return i; } //抽象方法-让别人来实现具体的内容. //变成这边实现 抽出方法 @Override public View getView(int position, View view, ViewGroup viewGroup) { ViewHolder viewHolder = ViewHolder.getViewHolder(context, view, layoutId, position); convert(viewHolder, position); return viewHolder.getConvertView(); } public abstract void convert(ViewHolder viewHolder, int position);}
具体剖析
1、ViewHolder
mDatas用于存储所有的子条目布局,为了能够适配所有的适配器,将布局传入构造方法。
在getViewHolder方法中,相当于是原来适配器中的getView方法的一部分,对convertview做判断,视情况是创建还是返回以前已经有的viewholder。
在getView方法中,如果mDatas中含有想要找到的view,就返回;没有就findviewbyid。
2、CommonAdapter
他继承于BaseAdapter。构造方法中传入了需要的布局ID,和需要的数据。
当在实现重要方法getView的时候 抽取出区别于其他内容的具体展现来抽象化了一个方法convert。
所以以后想要做的适配器直接继承CommonAdapter就好,并且具体实现convert方法来实现如何展现布局中的内容。
注意:
ViewHolder中的构造方法中的position,需要传递。
写在后面
如果有什么疑问或者有误或者更好的见解,欢迎评论。
转载请附原文链接。谢谢~~~
阅读全文
0 0
- ListView/GridView适用的万能适配器
- Android万能适配器改进篇--ListView,GridView适用
- ListView、GridView万能适配器
- ListView GridView 万能适配器
- ListView,GridView万能适配器
- CommonAdapter-万能的ListView.GridView的适配器
- 打造万能的android ListView GridView 适配器
- Android 打造万能的ListView GridView 适配器
- Adapter---打造万能的ListView GridView 适配器
- Adapter---打造万能的ListView GridView 适配器
- android 打造万能的ListView GridView 适配器
- Android 打造万能的ListView GridView 适配器
- 打造万能的ListView GridView 适配器
- 打造万能的ListView GridView 适配器
- listview gridview 的万能适配器 baseAdapter
- 打造万能的ListView GridView 适配器
- ListView和GridView的万能适配器
- 万能适配器 listview gridview RecyclerView
- 浅学Gson
- jsp九大内置对象与四大域对象
- 两个字符串的最长公共子序列
- 数据挖掘之异常点检测
- CentOS中安装eclipse详细步骤
- ListView/GridView适用的万能适配器
- 母函数
- java中的锁(未完待续)
- UCB算法升职记——LinUCB算法
- greenDao使用中android.database.sqlite.SQLiteException: no such table
- for循环的简介及break和continue的区别
- 水仙花数
- 委托
- 行为饮食(不吃...)面健身