ViewHolder模式超简洁写法
来源:互联网 发布:苹果能ghost windows 编辑:程序博客网 时间:2024/04/27 20:24
相信很多人在使用ListView的时候都要进行ListView优化,所采用的方法便是Holder,代码如下
ViewHolder holder = null; if(convertView == null){ convertView = mInflater.inflate(R.layout.xxx null); holder = new ViewHolder(); holder.tvXXX= (TextView)findViewById(R.id.xxx); //...一连串的findViewById }else{ holder = (ViewHolder) convertView.getTag(); } private static class ViewHolder{ TextView tvXXX; //很多view的定义 }
在少量使用ViewAdapter的时候使用这种写法还是可以的,但当我们大量使用的时候就显得有些麻烦了。外网站上看的,一个比较简洁的设计。
ViewHolder这么写(只提供一个静态方法,其实可以加一个私有构造函数防止外部实例化),代码很简单,看过就明白了
public class ViewHolder {client code @SuppressWarnings("unchecked") //静态方法,返回类型为一个泛型 public static T get(View view, int id) { //关于SpareArray的使用说明详细见[这里写链接内容] (http://blog.csdn.net/easyer2012/article/details/37871031) SparseArray viewHolder =(SparseArray) view.getTag(); if (viewHolder == null) { //如果为空则创建viewHolder viewHolder = new SparseArray(); view.setTag(viewHolder); } //更具key拿到value View childView = viewHolder.get(id); if (childView == null) { childView = view.findViewById(id); viewHolder.put(id, childView); } return (T) childView; }}
在getView里这样
@Overridepublic View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = LayoutInflater.from(context).inflate(R.layout.banana_phone, parent,false); ImageView bananaView = ViewHolder.get(convertView, R.id.banana); TextView phoneView = ViewHolder.get(convertView, R.id.phone); //这是一个数据list BananaPhone bananaPhone = getItem(position); phoneView.setText(bananaPhone.getPhone()); bananaView.setImageResource(bananaPhone.getBanana()); return convertView;}
说明:这种Holder的核心在于封装一个SparseArray用来存放Item中的View的id和View本身,在第一次创建Holder的时候SparseArray为空
便通过如下代码来填充SparseArray
childView = view.findViewById(id); viewHolder.put(id, childView);
1 0
- ViewHolder模式超简洁写法
- ViewHolder模式超简洁写法
- ViewHolder模式超简洁写法
- ViewHolder模式超简洁写法
- ViewHolder模式超简洁写法
- ViewHolder模式超简洁写法
- ViewHolder模式超简洁写法
- ViewHolder模式超简洁写法
- ViewHolder模式超简洁写法
- ViewHolder模式超简洁写法
- ViewHolder模式超简洁写法
- ViewHolder模式超简洁写法
- ViewHolder模式超简洁写法
- 【工具类】ViewHolder模式超简洁写法
- ViewHolder模式超简洁写法,很cool!
- ViewHolder模式超简洁写法,很cool!
- android ViewHolder模式超简洁写法
- Android ViewHolder模式超简洁写法
- 九度OJ 1019 简单计算器
- LTP资料
- NYOJ-999-师傅又被妖怪抓走了
- 【OpenCV入门教程之十一】 形态学图像处理(二):开运算、闭运算、形态学梯度、顶帽、黑帽合辑
- 极客 - 博文2 - 斐波那契数列之递归实现
- ViewHolder模式超简洁写法
- [设计模式]解释器模式
- 自定义父类标签、选择标签
- VS2015使用技巧 console.writeline的快捷键
- 哈夫曼树
- 最大递增子序列求解从O(n^2)到O(nlogn)
- IPC(进程间通信)概述
- 多级反馈队列调度算法
- Android中的GridView的运用