ListView 中getView的原理详解
2013-02-25 00:20
323 查看
ListView 和 Adapter 的基础
工作原理:
ListView 针对List中每个item,要求 adapter “给我一个视图” (getView)。
一个新的视图被返回并显示
如果我们有上亿个项目要显示怎么办?为每个项目创建一个新视图?NO!这不可能!
实际上Android为你缓存了视图。
Android中有个叫做Recycler的构件,下图是他的工作原理:
如果你有10亿个项目(item),其中只有可见的项目存在内存中,其他的在Recycler中。
ListView先请求一个type1视图(getView)然后请求其他可见的项目。convertView在getView中是空(null)的。
当item1滚出屏幕,并且一个新的项目从屏幕低端上来时,ListView再请求一个type1视图。convertView此时不是空值了,它的值是item1。你只需设定新的数据然后返回convertView,不必重新创建一个视图。
请看下面的示例代码,这里在getView中使用了System.out进行输出
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
.relpost{clear:both}
Tag:
Freenovo 发表于2013-02-25 00:20:00 | 编辑 | 分享 0
引用地址:
工作原理:
ListView 针对List中每个item,要求 adapter “给我一个视图” (getView)。
一个新的视图被返回并显示
如果我们有上亿个项目要显示怎么办?为每个项目创建一个新视图?NO!这不可能!
实际上Android为你缓存了视图。
Android中有个叫做Recycler的构件,下图是他的工作原理:
如果你有10亿个项目(item),其中只有可见的项目存在内存中,其他的在Recycler中。
ListView先请求一个type1视图(getView)然后请求其他可见的项目。convertView在getView中是空(null)的。
当item1滚出屏幕,并且一个新的项目从屏幕低端上来时,ListView再请求一个type1视图。convertView此时不是空值了,它的值是item1。你只需设定新的数据然后返回convertView,不必重新创建一个视图。
请看下面的示例代码,这里在getView中使用了System.out进行输出
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
.relpost{clear:both}
Tag:
Freenovo 发表于2013-02-25 00:20:00 | 编辑 | 分享 0
引用地址:
相关文章推荐
- ListView优化原理详解
- ListView 中getView的原理+如何在ListView中放置多个item(android.widget.ListView)
- Scrolview 嵌套ListView 导致ListView条目不能展开的问题及原理详解
- ListView OnScrollListener详解
- 图像处理中的数学原理详解18——内积与外积
- iptables 原理及应用详解
- 视口(viewport)原理详解之第一部分
- Tomcat启动过程原理详解
- JAVA中数据库连接池原理机制详解
- 网桥原理及源代码详解
- Android Nuwa 热修复原理和的gradle插件详解并怎么修改gradle插件
- 主成分分析(PCA)原理详解
- 虚拟化的发展历程和实现原理——图文详解
- 自定义View控件详解(一) :Android LayoutInflater原理分析,带你一步步深入了解View
- (iOS-基本知识)Category VS Extension 原理详解
- ListView详解(一)之ArrayAdapter的使用
- DNS基础原理及配置详解
- Android之ListView原理学习与优化总结
- 单片机定时器中断原理和C语言代码详解