• listview--Java泛型应用之打造Android万能ViewHolder-超简洁写法


    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010785585/article/details/52808656

    转载请注明出处:http://blog.csdn.net/linglongxin24/article/details/52808656 【DylanAndroid的csdn博客】


    在ListView的Adapter中的getView()方法中的繁琐写法

    @Override  
    public View getView(int position, View convertView, ViewGroup parent) {  
        ViewHolder viewHolder = null;
        if (convertView == null) {  
            convertView = LayoutInflater.from(context)  
              .inflate(R.layout.item, parent, false);  
              viewHolder = new ViewHolder();
              viewHolder.name = (TextView) convertView.findViewById(R.id.name);
               convertView.setTag(viewHolder);
        }else{
                viewHolder = (ViewHolder) convertView.getTag();
            }
    
      viewHolder.name.setText("sss"); 
    
        return convertView;  
    }  
    private static class ViewHolder
        {
            TextView name;
        }

    先了解一下SparseArray

    SparseArray(稀疏数组).他是Android内部特有的api,标准的jdk是没有这个类的.在Android内部用来替代HashMap<Integer,E>这种形式,使用SparseArray更加节省内存空间的使用,SparseArray也是以key和value对数据进行保存的.使用的时候只需要指定value的类型即可.并且key不需要封装成对象类型.

    最后经过优化和简化后的代码

    • 代码
    
    /**
     * Created by yuandl on 2016-10-13.
     */
    
    import android.util.SparseArray;
    import android.view.View;
    
    /**
     * 万能的ViewHolder
     *
     * @author
     */
    public class CommonViewHolder {
        /**
         * @param view 所有缓存View的根View
         * @param id   缓存View的唯一标识
         * @return
         */
        public static <T extends View> T get(View view, int id) {
    
            SparseArray<View> viewHolder = (SparseArray<View>) view.getTag();
            //如果根view没有用来缓存View的集合
            if (viewHolder == null) {
                viewHolder = new SparseArray<View>();
                view.setTag(viewHolder);//创建集合和根View关联
            }
            View chidlView = viewHolder.get(id);//获取根View储存在集合中的孩纸
            if (chidlView == null) {//如果没有改孩纸
                //找到该孩纸
                chidlView = view.findViewById(id);
                viewHolder.put(id, chidlView);//保存到集合
            }
            return (T) chidlView;
        }
    }
    • 用法(可以看到省去了好多代码)
    @Override  
    public View getView(int position, View convertView, ViewGroup parent) {  
    
        if (convertView == null) {  
            convertView = LayoutInflater.from(context)  
              .inflate(R.layout.item, parent, false);  
        }  
    
        TextView name= CommonViewHolder.get(convertView, R.id.name);  
    
        name.setText("sss");  
    
        return convertView;  
    }  

    GitHub源码地址https://github.com/linglongxin24/ListViewUpdate/blob/master/app/src/main/java/cn/bluemobi/dylan/listviewupdate/adapter/CommonViewHolder.java

    --------------------- 本文来自 DylanAndroid 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/linglongxin24/article/details/52808656?utm_source=copy 

  • 相关阅读:
    spark学习进度11(RDD分区和我shuffle以及缓存)
    spark学习进度10(阶段练习)
    gradle体验笔记
    git 进阶命令
    git 基础命令
    看日记学git--笔记
    git的objects目录
    macos中gitk报错
    第5章 迪米特法则(最少知知识原则)
    操作系统概念 第9版
  • 原文地址:https://www.cnblogs.com/awkflf11/p/9744713.html
Copyright © 2020-2023  润新知