ListView的简单优化
【摘要】 本文介绍了通过使用`ViewHolder`模式优化`ListView`适配器的原理与实现。核心思想是创建一个容器(`ViewHolder`)来存储复用的`View`,减少`findViewById`的调用次数,从而提升性能。在`BaseAdapter`的`getView`方法中,通过判断`convertView`是否为空,决定是否需要重新初始化视图。
原理:创建一个容器装要复用的View,设置判断,达到减少findViewById的次数的效果
MainActivity如下,这个比较简单就不解释了
主要讲下适配器:
继承BaseAdapter后实现四个方法
具体解释如下图(两图是一起的,最后会放源码)
上图所示:在getview方法中有三个参数,起到优化的部分为ViewHolder的使用,主要方法setTag(),getTag()。
适配器代码如下:
public class Myadapter extends BaseAdapter {
List<String> date;
Context context;
//构造方法
public Myadapter(List<String> date, Context context) {
this.date = date;
this.context = context;
}
//获取ListView的总条目数
@Override
public int getCount() {
return date.size();
}
//条目的索引
@Override
public Object getItem(int position) {
return date.get(position);
}
//获取条目的位置
@Override
public long getItemId(int position) {
return position;
}
/*
* 渲染(填充),调用data.size次
* position 索引
* convertView 条目的View
* parent :Listview
* */
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
//当convertView首次加载的时候
if (convertView == null) {
//获取打气筒
LayoutInflater inflater = LayoutInflater.from(context);
//填充单个Item
convertView = inflater.inflate(R.layout.item_main, null);
//获取Viewholder对象,减少findViewById的次数
holder = new ViewHolder();
//从填充的条目View中找到我们所关心的控件
holder.textView = convertView.findViewById(R.id.tv_my);
//将holder装进convertView的口袋
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
//填充数据
holder.textView.setText(date.get(position));
return convertView;
}
//创建一个容器装要复用的View
static class ViewHolder {
TextView textView;
}
}
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)