ListView适配器及缓存机制
来源:互联网 发布:阿里云销售待遇 编辑:程序博客网 时间:2024/05/14 04:59
ListView和适配器的基础:
它是如何工作的:
下一个问题:当我们有10亿个条目的时候怎么办,难道新创建一个新的布局并显示出来吗?答案肯定是“不”。Android会为你把布局缓存起来。
这一部分在Android中称呼为"Recycle - 回收利用"。以下为它的具体实现过程图。
运行程序并观察发生了什么
getView方法调用了9次。对于可以看见的VIew中,convertView一直为null。
拖动以下,并查看输出的状态。
就像我们所想到的一样,convertView不为null.当item11超出屏幕之后,并进来item21的时候2个convertView为同一个View。
不同的列表条目的View
我们举一个更加复杂点的例子吧,我们加入一个分隔符到ListView中。
你需要做的是:
我们运行并查看以下我们写的代码所输出的东西,我们会发现每隔4个条目它会出现一个分隔符。
查看输出Log,没有什么特别的对于不同的类型 convertView都为Null
拖动一下,看看Log中有什么变化
分隔符的convertView为Null,直到第一个分隔符看见为止。当它超出屏幕时,View还会缓存到Recycler中,以使convertView显示出来。
源码: MultipleItemsList.zip
它是如何工作的:
- ListView 向适配器说“给我的每个条目一个布局”
- 一个新的布局创建出来并显示出来
下一个问题:当我们有10亿个条目的时候怎么办,难道新创建一个新的布局并显示出来吗?答案肯定是“不”。Android会为你把布局缓存起来。
这一部分在Android中称呼为"Recycle - 回收利用"。以下为它的具体实现过程图。
- 当你有一亿个条目的时候, 只有可看见的View保存在内存中+Recycle过的View
- 当ListView第一次向适配器请求一个VIew的时候,convertView为null,因此需要新建一个convertView.
- 当ListView请求一个条目item1的VIew,并且item1已经超出屏幕之外,并进来一个相同类型的条目从底部进入到屏幕里面,这时convertVIew 不为null,而是等于item1。 你只需要获取新的数据装载到该View里面并返回回去。而不必要重新创建一个新的VIew
运行程序并观察发生了什么
getView方法调用了9次。对于可以看见的VIew中,convertView一直为null。
拖动以下,并查看输出的状态。
就像我们所想到的一样,convertView不为null.当item11超出屏幕之后,并进来item21的时候2个convertView为同一个View。
不同的列表条目的View
我们举一个更加复杂点的例子吧,我们加入一个分隔符到ListView中。
你需要做的是:
- 重写getViewTypeCount() ->它返回不同的View的个数
- getItemViewType(int) -> 根据它的位置返回正确的View类型
- Create correct convertView (depending on view item type) in getView
我们运行并查看以下我们写的代码所输出的东西,我们会发现每隔4个条目它会出现一个分隔符。
查看输出Log,没有什么特别的对于不同的类型 convertView都为Null
拖动一下,看看Log中有什么变化
分隔符的convertView为Null,直到第一个分隔符看见为止。当它超出屏幕时,View还会缓存到Recycler中,以使convertView显示出来。
源码: MultipleItemsList.zip
- ListView适配器及缓存机制
- ListView适配器及缓存机制
- Android性能:经典ListView适配器convertView缓存及复用机制
- Android性能:经典ListView适配器convertView缓存及复用机制
- Andndroid:ListView缓存机制及BaseAdapter
- listview的缓存机制
- ListView缓存机制
- ListView缓存机制
- ListView缓存优化机制
- ListView优化及万能适配器
- ListView的适配器及优化
- 适配器及ListView的优化
- android之listView缓存机制
- 探究ListView 的缓存机制
- ListView源码分析缓存机制
- Listview缓存机制分析(四)
- ListView 缓存机制源码浅析
- ListView适配器以及ListItem回收重用机制
- flex htmlText属性<a>标签调用AS函数
- Python字符串的encode与decode研究心得乱码问题解决方法
- ios联系人信息增删改查
- java 调度器
- java基础知识备忘
- ListView适配器及缓存机制
- java keytool的用法
- Resin Application Server 4.0.36 Source Code Disclosure
- windows安全日志-登陆类型
- 堆与栈的区别(stack&heap)
- Android使用BitmapFactory.Options解决加载大图片内存溢出问题
- ZPanel 10.0.0.2 Remote Command Execution
- oracle中误删除表后恢复语句
- Intel AMT links from Internet