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

 

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

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


在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不须要封装成对象类型.android

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

  • 代码
/** * 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 git

相关文章
相关标签/搜索