Android优化adapter及SparseArray介绍

在鸿洋大神的博文里介绍了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。


CodeBlog是我做的一个编程技术学习客户端,集成了很多技术网站上的博客,应用宝详情页

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,968评论 25 709
  • 整理一些常见的Android面试题(针对于2~3年开发经验中所遇到的问题) synchronized锁静态方法和非...
    appzy阅读 6,955评论 4 18
  • afinalAfinal是一个android的ioc,orm框架 https://github.com/yangf...
    passiontim阅读 15,745评论 2 45
  • 今天跑步11公里。 早晨七点出门,阴,微风,气温五度。气候学上说,低于十度就是冬天了。依旧短袖加抓绒。 出了楼门感...
    蜂蜜和温暖阅读 3,388评论 2 0
  • Consul的安装 一台服务器端,多台客户端。 (服务与客户端)下载安装包,放入到/bin下。 (服务端)nohu...
    无言大叔阅读 3,576评论 0 0

友情链接更多精彩内容