ListView的显示与缓存机制
我们知道,ListView、GridView等控件可以展示大量的数据信息。假如下图中的ListView可以展示100条信息,但是屏幕的尺寸是有限的,一屏幕只能显示下图中的7条。当向上滑动ListView的时候,item1被滑出了屏幕区域,那么系统就会将item1回收到Recycler中,即View缓冲池中,而将要显示的item8则会从缓存池中取出布局文件,并重新设置好item8需要显示的数据,并放入需要显示的位置。这就是ListView的缓冲机制,总结起来就是一句话:需要时才显示,显示完就被会收到缓存。ListView,GridView等数据显示控件通过这种缓存机制可以极大的节省系统资源。
优化一
convertView的使用,优化加载布局
if (convertView == null) {
convertView = mInflater.inflate(R.layout.item_test, null);
}
优化二
内部类ViewHolder的使用,优化加载控件
@Override
//返回每一项的显示内容
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.item_test, null);
viewHolder = new ViewHolder();
viewHolder.imageView = convertView.findViewById(R.id.iv_image);
viewHolder.title = convertView.findViewById(R.id.tv_title);
viewHolder.content = convertView.findViewById(R.id.tv_content);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
News news = mList.get(position);
if (news != null) {
viewHolder.imageView.setImageResource(news.itemImageResId);
viewHolder.title.setText(news.title);
viewHolder.content.setText(news.content);
}
return convertView;
}
class ViewHolder {
public ImageView imageView;
public TextView title;
public TextView content;
}