Java泛型应用之打造Android万能ViewHolder-超简洁写法
来源:互联网 发布:顶级域名的两大类 编辑:程序博客网 时间:2024/05/22 10:32
转载请注明出处: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
4 0
- Java泛型应用之打造Android万能ViewHolder-超简洁写法
- 泛型应用之打造Android万能ViewHolder-超简洁写法
- Java泛型应用之打造Android中ListView和GridView万能适配器【CommonAdapter】--超简洁写法
- android ListView优化之ViewHolder的超简洁写法
- Android笔记之ListView的ViewHolder超简洁写法
- android ViewHolder模式超简洁写法
- Android ViewHolder模式超简洁写法
- android ViewHolder模式超简洁写法
- android ViewHolder模式超简洁写法
- android ViewHolder模式超简洁写法
- ViewHolder模式超简洁写法
- ViewHolder模式超简洁写法
- ViewHolder模式超简洁写法
- ViewHolder模式超简洁写法
- ViewHolder模式超简洁写法
- ViewHolder模式超简洁写法
- ViewHolder模式超简洁写法
- ViewHolder模式超简洁写法
- ORB-SLAM2搭建详细过程
- hdu 1711 Number Sequence (kmp)
- The 'Apple Developer Program License Agreement' has been updated. In order to access certain members
- RxJava中create源码
- Ubuntu虚拟机NAT模式无法上网解决方案
- Java泛型应用之打造Android万能ViewHolder-超简洁写法
- Android 5.0以下系统进程守活
- scanf()取地址
- Android Studio 配置Terminal
- 简单地一个DOS端口映射程序
- Json数据结构比对
- VC++60 第一章 创建应用程序的四个步骤
- [IDA Plugin] 改善IDA6.8对中文等非英语国家的ANSI字符串显示支持不佳的问题
- 调用系统打电话的方法