ListView中ViewHolder的更简单的一种写法
来源:互联网 发布:期货买卖 知乎 编辑:程序博客网 时间:2024/06/05 07:32
最近偶然在eoe论坛上看到了一Viewholder的一种新的写法,感觉还不错,可以省下大量的重复代码,貌似性能上也没什么损耗!收藏的用一下;
我们一贯的写法都是每个listView的写一个Viewholder,然后在里面声明一些需要的View的变量,然后在getView()中操作
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的定义
}
看看别人介绍的一种写法
public class ViewHolder { // I added a generic return type to reduce the casting noise in client code @SuppressWarnings("unchecked") public static <T extends View> T get(View view, int id) { SparseArray<View> viewHolder = (SparseArray<View>) view.getTag(); if (viewHolder == null) { viewHolder = new SparseArray<View>(); view.setTag(viewHolder); } View childView = viewHolder.get(id); if (childView == null) { childView = view.findViewById(id); viewHolder.put(id, childView); } return (T) childView; }}
一种类,其它地方全部可以用了,在getview()里面用起来也相当简单了,连非空判断,setTag也完处理了;
唯一不同的地方是用SparseArray来存储要用的childView了;SparseArray是HashMap的增加版,性能略有提高;
@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); BananaPhone bananaPhone = getItem(position); phoneView.setText(bananaPhone.getPhone()); bananaView.setImageResource(bananaPhone.getBanana()); return convertView;}
0 0
- ListView中ViewHolder的更简单的一种写法
- ViewHolder 的一种更简洁写法
- 摆脱ViewHolder,一种无需ViewHolder的高效ListView写法
- 摆脱ViewHolder,一种无需ViewHolder的高效ListView写法
- ListView适配器中ViewHolder的超级简洁写法
- 无需设置viewholder的Listview写法
- ListView的适配器中viewHolder
- C#中一种替换switch语句更优雅的写法
- BaseAdapter的getView()与ViewHolder的两种写法-更深刻理解ViewHolder
- ViewHolder的 简洁写法
- ViewHolder的简洁写法
- ViewHolder的另一种写法
- 通用ViewHolder的写法
- ViewHolder 的另类写法
- ViewHolder的简洁写法
- ViewHolder的简洁写法
- ViewHolder的简洁写法
- ViewHolder的简便写法
- Eclipse 单步调试
- 黑马程序员_java高新之泛型
- 返回一组数中最大的K个(JS实现)
- 有道词典的问题
- Git - 远程仓库的使用
- ListView中ViewHolder的更简单的一种写法
- C++11对多线程的支持
- The Falling Leaves 简单的遍历+建树
- 黑马程序员_java高新(二)_反射
- 去为!
- spring的普通类中如何取session和request对像
- 默认内联成员函数
- hiberante学习笔记6(调用存储过程 和触发器)
- jdk和jre的区别