android BaseAdapter getView 理解
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 理解的更多相关文章
- Android Adapter基本理解
感谢大佬:https://blog.csdn.net/l799069596/article/details/47301711 Android Adapter基本理解: 我的理解是: 1.一个有许多ge ...
- [译]:Xamarin.Android开发入门——Hello,Android Multiscreen深入理解
原文链接:Hello, Android Multiscreen_DeepDive. 译文链接:Xamarin.Android开发入门--Hello,Android Multiscreen深入理解. 本 ...
- Android动画的理解
基础知识 在我们开始讲Android动画这个知识点之前,我们了解下相应的基础知识点. Shape篇 一般用Shape定义的XML文件是存放在Drawable目录下,广泛应用于在Button.TextV ...
- Android灯光系统--深入理解背光灯
Android灯光系统--深入理解背光灯 一.怎么控制背光灯(简述) APP将亮度值写入数据库 线程检测数据库的值是否发生变化 这种机制成为"内容观察者"--contentObse ...
- 移动端测试===Android内存管理: 理解App的PSS
Android内存管理: 理解App的PSS 原文链接:http://www.littleeye.co/blog/2013/06/11/android-memory-management-unders ...
- Android ListView getView()方法重复调用导致position错位
问题现状:Android ListView getView()方法重复调用导致position错位 解决办法:把ListView布局文件的layout_height属性改为fill_parent或者m ...
- android开发中的BaseAdapter之理解(引用自网络,总结的很好,谢谢)
android中的适配器(Adapter)是数据与视图(View)之间的桥梁,用于对要显示的数据进行处理,并通过绑定到组件进行数据的显示. BaseAdapter是Android应用程序中经常用到的基 ...
- Android listview与adapter用法(BaseAdapter + getView)
Android listview与adapter用法http://www.cnblogs.com/zhengbeibei/archive/2013/05/14/3078805.html package ...
- Android BaseAdapter的使用
数据适配器有很多种,今天在这里记录一下最通用是适配器BaseAdapter. 首先说一下什么是适配器,这里我从网上找到一幅图片 由上图我们不难看出,所谓的适配器,就是数据与视图之间的桥梁.由它把数据绑 ...
随机推荐
- 第一章 Actionscript学习基本知识笔记及flashdevelop软件的安装问题
OOP:封装.继承.多态. Pubilc :完全公开. Internal:包内类成员可以互相访问. Private:仅当前类可以访问. Protected:当前类和当前类的子类可以访问. 被关键词fi ...
- 配置Android-Annotation (github20大开源:http://www.eoeandroid.com/thread-278980-1-1.html)
1. 把androidannotations-X.X.X-api.jar 放在libs文件夹 2. 把androidannotations-X.X.X.jar 放在文件夹compile-libs,1与 ...
- 安卓源码下载 windows
git clone https://android.googlesource.com/name Name Descriptionaccessories/manifest device/asus/deb ...
- iOS开源项目:asi-http-request
使用CFNetwork实现的http库,能同时在iphone和macos下使用:http://allseeing-i.com/ASIHTTPRequest/ 他提供以下功能: 向服务器发送或者从服务器 ...
- 10.线程通信CountDownLatch
CountDownLatch 1.一个同步的辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个.多个线程去一直等待,用给定的计数.初始化“CountDownLatch”. 由于调用 count ...
- Javascript屏蔽鼠标右键-超简单,不过还是记录一下
Javascript屏蔽鼠标右键,其实作用也不大,也许是为了防止别人查看源代码,其实想查看源代码有多种途径,未必需要通过鼠标右键.不过当我们自定义鼠标右键弹出菜单时,也许需要这些. 下面是源码: 1 ...
- C#的四个基本技巧
1.如果可能尽量使用接口来编程 .NET框架包括类和接口,在编写程序的时候,你可能知道正在用.NET的哪个类.然而,在这种情况下如果你用.NET支持的接口而不是它的类来编程时,代码会变得更加稳定.可用 ...
- J2EE 中 用 El表达式 和 Jsp 方式 取得 URL 中的参数方法
使用 el表达式方法: var urlParamValue = "${param.urlVarName}"; 使用 Jsp 表达式 var urlParamValue2 = &qu ...
- PLSQL初次登录oracle报错处理
server1上面装了oracle client ,也装了plsql,但是登录了以后,不显示database 和connect as 手工输入正确的用户名和database后报错如下 于是就取消登录 ...
- python常用代码积累
一.文件操作 1.判断一个目录是否存在,若不存在则创建 if not os.path.isdir(new_path): os.makedirs(new_path) 2.新建一个文件 f=open(&q ...