BaseAdapter
2015-09-24 18:51
253 查看
BaseAdapter(数据适配器):降低耦合性,容易扩展
1.ListView的显示和缓存
ListView加载屏幕可以显示的数据,当item滑出屏幕显示区域,系统就会将item回收到Recyler缓存池中,然后从缓存池中取出屏幕将要显示的item,并给其设置数据加载到ListView
数据适配器--BaseAdapter
BaseAdapter基本结构:
public int getCount():适配器中数据集中数据的个数
public Object getItem(int position):获取数据集中与指定索引对应的数据项
public long getItemId(int position) :获取制定行对应的ID
public View getView(int position ,View convertView ,ViewGroup parent):获取每一个Item显示的内容
A.逗比式
直接在getView方法中不停的创建新的View,没有利用ListView的缓存机制,浪费资源
代码:
B.普通式
考虑当前创建的convertView是否已经被缓存,如果被缓存就直接拿着convertView用,不用再重新创建View,此时考虑到遍历findViewById会浪费大量时间,依然要进一步优化
代码:
C.文艺式
创建内部类ViewHolder,判断convertView是否为空,将View对象的内容封装到ViewHolder中,通过convertView.setTag(holder),建立convertView与ViewHolder的关系,通过convertView.getTag()得到封装好View内容的ViewHolder对象,然后就可以给声明的对象去赋值,避免了重复的findViewById
优点:利用了ListView的缓存机制,通过ViewHolder类实现显示数据视图的缓存,避免多次通过findViewById寻找控件
代码:
ViewHolder优化BaseAdapter思路:
创建Bean对象,用于封装数据
在构造方法中初始化用于映射的数据List集合
创建ViewHolde类,创建布局映射关系
判断convertView,为空则创建,并设置Tag,否则通过Tag来取出ViewHolder
给ViewHolder中的控件设置数据
BaseAdapter(数据适配器):降低耦合性,容易扩展
1.ListView的显示和缓存
ListView加载屏幕可以显示的数据,当item滑出屏幕显示区域,系统就会将item回收到Recyler缓存池中,然后从缓存池中取出屏幕将要显示的item,并给其设置数据加载到ListView
数据适配器--BaseAdapter
BaseAdapter基本结构:
public int getCount():适配器中数据集中数据的个数
public Object getItem(int position):获取数据集中与指定索引对应的数据项
public long getItemId(int position) :获取制定行对应的ID
public View getView(int position ,View convertView ,ViewGroup parent):获取每一个Item显示的内容
A.逗比式
直接在getView方法中不停的创建新的View,没有利用ListView的缓存机制,浪费资源
代码:
@Override public View getView(int position, View convertView, ViewGroup parent) { ApkEntity entity = apk_list.get(position); View view =inflater.inflate(R.layout.item_layout, null); TextView name=(TextView)view.findViewById(R.id.apkname); TextView des=(TextView)view.findViewById(R.id.apkdes); TextView info=(TextView)view.findViewById(R.id.apkinfo); name.setText(entity.getName()); des.setText(entity.getDes()); info.setText(entity.getInfo()); return view; }
B.普通式
考虑当前创建的convertView是否已经被缓存,如果被缓存就直接拿着convertView用,不用再重新创建View,此时考虑到遍历findViewById会浪费大量时间,依然要进一步优化
代码:
@Override public View getView(int position, View convertView, ViewGroup parent) { ApkEntity entity = apk_list.get(position); if(convertView==null){ convertView =inflater.inflate(R.layout.item_layout, null); } TextView name=(TextView)convertView.findViewById(R.id.apkname); TextView des=(TextView)convertView.findViewById(R.id.apkdes); TextView info=(TextView)convertView.findViewById(R.id.apkinfo); name.setText(entity.getName()); des.setText(entity.getDes()); info.setText(entity.getInfo()); return convertView; }
C.文艺式
创建内部类ViewHolder,判断convertView是否为空,将View对象的内容封装到ViewHolder中,通过convertView.setTag(holder),建立convertView与ViewHolder的关系,通过convertView.getTag()得到封装好View内容的ViewHolder对象,然后就可以给声明的对象去赋值,避免了重复的findViewById
优点:利用了ListView的缓存机制,通过ViewHolder类实现显示数据视图的缓存,避免多次通过findViewById寻找控件
代码:
@Override public View getView(int position, View convertView, ViewGroup parent) { ApkEntity entity = apk_list.get(position); ViewHolder holder; if(convertView==null){ holder=new ViewHolder(); convertView=inflater.inflate(R.layout.item_layout, null); holder.name=(TextView)convertView.findViewById(R.id.apkname); holder.des=(TextView)convertView.findViewById(R.id.apkdes); holder.info=(TextView)convertView.findViewById(R.id.apkinfo); convertView.setTag(holder); }else{ holder=(ViewHolder)convertView.getTag(); } holder.name.setText(entity.getName()); holder.des.setText(entity.getDes()); holder.info.setText(entity.getInfo()); return convertView; } private class ViewHolder { TextView name; TextView des; TextView info; }
ViewHolder优化BaseAdapter思路:
创建Bean对象,用于封装数据
在构造方法中初始化用于映射的数据List集合
创建ViewHolde类,创建布局映射关系
判断convertView,为空则创建,并设置Tag,否则通过Tag来取出ViewHolder
给ViewHolder中的控件设置数据
相关文章推荐
- iOS Xcode重要配置
- 几种中文分词工具
- Head First Python学习笔记3——持久存储
- ODS浅谈
- 把数据导出到Excel表格中的方式
- 从拓扑排序到广度优先搜索到单源最短路径
- redhat 6 配置 yum 源
- Google Chrome Source Code 源码下载
- 《iOS Human Interface Guidelines》——iOS App Anatomy
- git 记住用户名密码
- Linux开机过程的分析(关于bootsect.S)
- copypng emitted errors but did not return a nonzero exit code to indicate failure
- bulk load关于分隔符的问题
- 轻松搞定RabbitMQ(三)——消息应答与消息持久化
- (hdu step 7.1.2)You can Solve a Geometry Problem too(乞讨n条线段,相交两者之间的段数)
- shell脚本编程-检查和测试
- cocos基础教程(13)使用Physicals代替Box2D和chipmunk
- Efficient data transfer through zero copy
- 数据结构分析之线性哈希表(Linear Hash Tables)
- int 10 中断