listView 利用viewholder进行优化
来源:互联网 发布:linux top cpu 编辑:程序博客网 时间:2024/04/23 22:50
ListView优化:通过convertView+ViewHolder来实现,ViewHolder就是一个静态类,使用 ViewHolder 的关键好处是缓存了显示数据的视图(View),加快了 UI 的响应速度。
当我们判断 convertView == null 的时候,如果为空,就会根据设计好的List的Item布局(XML),来为convertView赋值,并生成一个viewHolder来绑定converView里面的各个View控件(XML布局里面的那些控件)。再用convertView的setTag将viewHolder设置到Tag中,以便系统第二次绘制ListView时从Tag中取出。(看下面代码中)
如果convertView不为空的时候,就会直接用convertView的getTag(),来获得一个ViewHolder。
//在外面先定义,ViewHolder静态类
static class ViewHolder
{
public ImageView img;
public TextView title;
public TextView info;
}
//然后重写getView
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if
(convertView ==
null
)
{
holder =
new
ViewHolder();
convertView = mInflater.inflate(R.layout.list_item,
null
);
holder.img = (ImageView)item.findViewById(R.id.img)
holder.title = (TextView)item.findViewById(R.id.title);
holder.info = (TextView)item.findViewById(R.id.info);
convertView.setTag(holder);
}
else
{
holder = (ViewHolder)convertView.getTag();
}
holder.img.setImageResource(R.drawable.ic_launcher);
holder.title.setText(
"Hello"
);
holder.info.setText(
"World"
);
}
return
convertView;
}
到这里,可能会有人问ViewHolder静态类结合缓存convertView与直接使用convertView有什么区别吗,是否重复了
在这里,官方给出了解释
缓存convertView传递给getView()方法来避免填充不必要的视图使用ViewHolder模式来避免没有必要的调用findViewById():因为太多的findViewById也会影响性能
ViewHolder模式通过getView()方法返回的视图的标签(Tag)中存储一个数据结构,这个数据结构包含了指向我们
要绑定数据的视图的引用,从而避免每次调用getView()的时候调用findViewById()
0 0
- listView 利用viewholder进行优化
- 利用ViewHolder优化BaseAdapter(ListView)
- android使用ViewHolder对ListView进行优化
- 使用ViewHolder优化ListView
- Android - ViewHolder优化ListView
- listview的优化---viewHolder
- Android ViewHolder 优化 ListView
- ListView的优化--ViewHolder
- listView 优化 -ViewHolder
- listview优化,viewHolder ,分页
- ViewHolder优化listview
- ListView优化--ViewHolder
- ListView优化之ViewHolder
- 使用ViewHolder优化ListVIew
- ListView优化-ViewHolder
- ListView的ViewHolder优化
- ListView优化-ViewHolder缓存
- Android ListView 优化—利用converView和viewHolder
- 右手坐标系中透视投影剖析-线性中都要除以-z 和 zn、zf是需要负数代入的
- getBackground().setAlpha导致所有资源都有变化
- JAVA NIO non-blocking模式实现高并发服务器
- Android studio 常见问题 Error running app:Instant Run requires "Tools|Android|Enable ADB integration"to
- 错误处理之函数返回值OR异常处理
- listView 利用viewholder进行优化
- String类 "+"的使用运行原理
- 关于图形学变换的前提
- 浅谈 MVP in Android
- UVA - 12663
- 底层移植之RBL, UBL, Uboot的关系
- iOS应用兼容IPv6
- More Effective C++----(15)了解异常处理的系统开销
- UE4 下载4.11.2的时候:当前遇到连接问题,正在重试