ListView是安卓中很经常使用的一个控件。

安卓设计使用Adapter来对ListView进行管理。

可是系统提供的Adapter无法满足一些复杂的显示情况,这个时候我们就须要使用BaseAdapter来自行实现ListView的控制。

其它的方法都非常好说。这里主要解释一下getView方法。

首先ListView在设计时,为了保障系统的性能(毕竟是移动终端,系统资源有限),设计时并非无限载入ItemView进去的。

试想一下,假设有1000条记录。难道要同一时候创建。并缓存1000个 ItemView对象吗?假设还包括图片等大型资源呢?

显然是不现实的。所以安卓设计时,採用了例如以下设计思路。

如上图所看到的。系统仅仅会创建一屏ItemView。详细个数依据屏幕显示控件计算得到。

当第一个itemView彻底被遮盖时,系统会移动它作为最后一个ItemView显示。

这样就保证始终仅仅有7个ItemView被实例化。

可是显然Item8和Item1显示内容是不一样的,这时候。我们就须要用到GetView这种方法了。

getView中的convertView,事实上就是屏幕显示的ItemView的引用。

在第一屏数据显示是,convertView为空。由于他们都须要被又一次创建。

在第二屏第一项数据被展示时。convertView就不在是空,而是被移动下来的第一屏第一项的View对象。

这时候我们须要做的,就是又一次把新的数据填充上去,保证它显示的是第二屏第一项的数据就可以。

详细參考链接:http://www.cnblogs.com/xiaowenji/archive/2010/12/08/1900579.html

至于我们经常见到的PlaceHolder这个东西,好吧,事实上他仅仅是一个经常使用的方式,为了不须要每次都又一次getViewByID。来获取对象引用。

简单来说,就是用起来比較方便罢了。事实上你也没必要要用这东西。每次都从convertView中又一次获取也不是不行,就是浪费代码,浪费资源罢了。

然后说说getView反复调用问题。多数都是因为重绘导致的。一般来说。奖Item的宽度和高度设置成fill_parent,尽量不要用match。这样会好非常多。

假设须要又一次绘制viewlist。能够使用notifyDataSetChanged,主要是起到刷新界面的作用。

详细參考链接:http://www.cnblogs.com/kissazi2/p/3721941.html

嘛,最后吐槽一下,感觉安卓非常多控件设计的耦合性好高。并且即使想要自行分离变量,也非常困难。

作者想要写一个通用的Adapter,吧GetView里面的可变因素抽象,开放出来,结果发现,真这样实现了导致好多接口对象的产生,感觉还不如一个页面一个Adapter来实现的方便,所以就不在这里献丑了。这也側面说明了,为什么安卓没有比較通用成熟的一些好的高速开发框架的原因。

android BaseAdapter getView 理解的更多相关文章

  1. Android Adapter基本理解

    感谢大佬:https://blog.csdn.net/l799069596/article/details/47301711 Android Adapter基本理解: 我的理解是: 1.一个有许多ge ...

  2. [译]:Xamarin.Android开发入门——Hello,Android Multiscreen深入理解

    原文链接:Hello, Android Multiscreen_DeepDive. 译文链接:Xamarin.Android开发入门--Hello,Android Multiscreen深入理解. 本 ...

  3. Android动画的理解

    基础知识 在我们开始讲Android动画这个知识点之前,我们了解下相应的基础知识点. Shape篇 一般用Shape定义的XML文件是存放在Drawable目录下,广泛应用于在Button.TextV ...

  4. Android灯光系统--深入理解背光灯

    Android灯光系统--深入理解背光灯 一.怎么控制背光灯(简述) APP将亮度值写入数据库 线程检测数据库的值是否发生变化 这种机制成为"内容观察者"--contentObse ...

  5. 移动端测试===Android内存管理: 理解App的PSS

    Android内存管理: 理解App的PSS 原文链接:http://www.littleeye.co/blog/2013/06/11/android-memory-management-unders ...

  6. Android ListView getView()方法重复调用导致position错位

    问题现状:Android ListView getView()方法重复调用导致position错位 解决办法:把ListView布局文件的layout_height属性改为fill_parent或者m ...

  7. android开发中的BaseAdapter之理解(引用自网络,总结的很好,谢谢)

    android中的适配器(Adapter)是数据与视图(View)之间的桥梁,用于对要显示的数据进行处理,并通过绑定到组件进行数据的显示. BaseAdapter是Android应用程序中经常用到的基 ...

  8. Android listview与adapter用法(BaseAdapter + getView)

    Android listview与adapter用法http://www.cnblogs.com/zhengbeibei/archive/2013/05/14/3078805.html package ...

  9. Android BaseAdapter的使用

    数据适配器有很多种,今天在这里记录一下最通用是适配器BaseAdapter. 首先说一下什么是适配器,这里我从网上找到一幅图片 由上图我们不难看出,所谓的适配器,就是数据与视图之间的桥梁.由它把数据绑 ...

随机推荐

  1. 提高软件质量实践——Facebook 篇

    提高软件质量实践——Facebook 篇 Facebook 从 2004 年的哈佛校园的学生项目在短短的 7~8 年的时间中快速增长为拥有 10 亿用户的世界上最大的社交网络,又一次见证了互联网创业成 ...

  2. html端编码规范

    理想的方式是让HTML只用于定义内容呈现的结构,让CSS控制内容呈现的样式,而所有功能的实现定义在JavaScript中

  3. JMS基本概念之二

    JMS规范  JMS定义了Java中访问消息中间件的接口,并没有给予实现,实现JMS接口的消息中间件称为JMS Provider,例如ActiveMQ JMS provider: 实现JMS接口和规范 ...

  4. IE6支持min-width、max-width CSS样式属性

    1.IE6支持max-width解决方法 IE6支持最大宽度,解决CSS代码: .yangshi{ max-width:1000px; _width:expression((document.docu ...

  5. SWFUpload 已上传成功数量控制 插件(用于解决队列满问题)

    当我们在使用 SWFUpload 做文件上传时,我们需要把已经上传的文件列表做一个删除, 但在我们把已上传列表删除后,再重新上传时,会发现提示 上传队列满 的问题,原因就是有一个状态对象中的一个 成功 ...

  6. jsp button提交表单

    表单提交可以用submit 也可以用button,下面介绍下面三种方式: 方法1 <form action = "提交的地址"> <input type=&quo ...

  7. 【Networking】Libevent客户端例子

    [原]Libevent客户端例子 时间 -- :: luotuo44的专栏 原文 http://blog.csdn.net/luotuo44/article/details/34416429 主题 l ...

  8. 【云计算】使用privilege权限对Docker内核参数进行定制

    探讨Docker容器中修改系统变量的方法 探讨完Docker对共享内存状态持久化的支持状况后,我将遗留产品build到一个pre-production image中,测试启动是否OK.很显然,我过于乐 ...

  9. 浅析GitLab Flow的十一个规则

    使用 Git 版本控制,是对使用它之前的所有版本控制方式的一种改进.然而,很多组织最终以太过混乱或过于复杂的流程来结束.这个问题对于刚从其他版本控制系统转过来的组织来说特别突出. 在本文中我们会列出 ...

  10. (转) 问题解决:Apache: You don't have permission to access / on this server

    问题解决:Apache: You don't have permission to access / on this server 转自:http://blog.csdn.net/crazyboy20 ...