在鸿洋大神的博文里介绍了Android 快速开发系列 打造万能的ListView GridView 适配器

在此,我直接把核心的部分截取出来详细记录一下:
这个是我在项目中使用的一个工具类:

public class ViewHolderUtil {    /** * 获取容器中指定的元素 * * @param view * @param id * @return */    @SuppressWarnings("unchecked")    public static <T extends View> T get(View convertView, int id) {        SparseArray<View> viewHolder = (SparseArray<View>) view.getTag(convertView.getId());//以id为键值的map        if (viewHolder == null) {            viewHolder = new SparseArray<View>();            view.setTag(convertView.getId(), viewHolder);//设置子view的map        }        View childView = viewHolder.get(id);//从map中取子view        if (childView == null) {            childView = convertView.findViewById(id);            viewHolder.put(id, childView);//将子view存放在map中        }        return (T) childView;    }}

在使用时,代码如下

        @Override        public View getView(int position, View convertView, ViewGroup parent) {            if (convertView == null) {                convertView = inflater.inflate(R.layout.search_item, null);            }            TextView title = ViewHolderUtil.get(convertView, R.id.title);//保证convertView不为空            TextView authorTime = ViewHolderUtil.get(convertView, R.id.authorTime);            TextView searchDetail = ViewHolderUtil.get(convertView, R.id.searchDetail);            SearchResult result = dataList.get(position);            if (result != null) {                title.setText(result.title);                authorTime.setText(result.authorTime);                searchDetail.setText(result.searchDetail);            }            return convertView;        }

因为convertView的tag以被设置为子view的map,所以在后面的使用中不可再次设置tag

为何map会使用SparseArray而不是HashMap呢?因为Android源码中就是这么干的,SparseArray比HashMap效率高多少
Android中的稀疏数组:SparseArray
结论是:当HashMap的key为整数时,则可以考虑使用SparseArray。

我写的CSDN博客客户端介绍:http://blog.csdn.net/brian512/article/details/43168141

点击查看应用详情

更多相关文章

  1. 【Android】【UI】8.0以上版本Notification的使用
  2. Android(安卓)设置圆角图片
  3. Android(安卓)RecyclerView设置点击事件
  4. Android(安卓)Studio中AVD SDk找不到的解决办法
  5. Android(安卓)NFS 文件系统
  6. android部分权限列表
  7. Android(安卓)设置TextView字体颜色
  8. [置顶] Android百度地图SDK 导航SDK2.0结合定位SDK6.0.5的导航参
  9. Android(安卓)自带语音识别功能

随机推荐

  1. Android中发送Http请求实例
  2. Android-编辑需求demo实现
  3. [转]android 系统权限大全的简介与内容
  4. #Android设计模式学习笔记(抽象工厂模式)
  5. 浅谈Android四大组件之ContentProvider
  6. Android(安卓)不规则封闭区域填充 手指秒
  7. Android(安卓)2D游戏引擎AndEngine配置环
  8. Android(安卓)TV HDMI开发
  9. Android实现拍照及图片显示效果
  10. 安卓广播的静态注册和动态注册