Android 缓存原理(一)----ListView缓存机制
来源:互联网 发布:华为路由器联网端口 编辑:程序博客网 时间:2024/05/02 04:44
一,ListView&GridView缓存机制
ListView 是安卓常用组件之一,ListView的缓存机制也是面试官经常会问到问题。但是很多做安卓的对这个还是一知半解,今天就把这个问题在博客中好好总结,完全解决所有的疑惑。
刚接触Android 的时候总会遇到此程序未响应的问题,往下拉着拉着就OOM了。原因就是Adapter没有写正确。
这里先讲一下Adapter中GetView的正确写法,如下例:
ViewHolder是一个内部类,其中包含了单个项目布局中的各个控件。
@Override public View getView(int position, View convertView, ViewGroup parent){ final ViewHolder holder; if(convertView == null){ //使用自定义的list_items作为Layout convertView = LayoutInflater.from(mContext).inflate(R.layout.item_list, parent, false); //使用减少findView的次数 holder = new ViewHolder(); holder.itemsIcon = ((ImageView) convertView.findViewById(R.id.itemsIcon)) ; holder.itemsTitle = ((TextView) convertView.findViewById(R.id.itemsTitle)); holder.itemsText = ((TextView) convertView.findViewById(R.id.itemsText)); //设置标记 convertView.setTag(holder); }else{ holder = (ViewHolder) convertView.getTag(); } //获取该行数据 Article mArticle = (Article)mList.get(position); //设置数据到View String imageUrl = (String)mArticle.getImageUrl(); holder.itemsTitle.setText(mArticle.getTitle()); holder.itemsText.setText(mArticle.getCreateTime()); return convertView; } /** * ViewHolder类 */static class ViewHolder {ImageView itemsIcon;TextView itemsTitle;TextView itemsText;}
1)关于SetTag方法
convertView.setTag(holder);
holder = (ViewHolder) convertView.getTag();
View对象的一个标签,标签可以是任何内容,我们这里把他设置成了一个对象,因为我们是把.xml的元素抽象出来成为一个类ViewHolder,用了setTag,这个标签就是ViewHolder实例化后对象的一个属性。<我们之后对于ViewHolder实例化的对象holder的操作,都会因为java的引用机制而一直存活并改变convertView的内容,而不是每次都是去new一个。
没有使用LayoutInflater对象进行View扩充的Tag的使用。
if (convertView != null) {
view = convertView; ...
}
else {
view = new Xxx(...);
}
(2)ListView 图解
- Android 缓存原理(一)----ListView缓存机制
- Android 缓存机制(一)
- Android 缓存机制(一)
- 解析Android ListView工作原理及其缓存机制
- android之listView缓存机制
- Android性能优化之ListView缓存机制
- Android性能优化之ListView缓存机制
- 再次探究Android ListView缓存机制
- listview的缓存机制
- ListView缓存机制
- ListView缓存机制
- ListView缓存优化机制
- ListView的缓存原理
- ListView的缓存原理
- ListView缓存原理剖析
- hibernate缓存机制(一)
- iOS缓存机制(一)
- iOS缓存机制(一)
- iOSAutoLayout自动布局中级开发教程(5)修改约束的值 延迟加载
- 多重集组合数DP
- 原来自己统计的设备数,用IMEI和MAC地址全不准
- oracle 11g 静默安装
- GEASP(职责分配原则)
- Android 缓存原理(一)----ListView缓存机制
- 第六届蓝桥杯A组C/C++ 第五题 九数组分数
- linux下用代码获取主板序列号
- javamail发送邮件的简单实例
- 环境的力量
- 详解js跨域问题(推荐阅读)
- Jeecg二级联动
- cogs爱争吵的猴子 题解
- 起泡排序bubblesort