BaseAdapter
来源:互联网 发布:java random.nextint 编辑:程序博客网 时间:2024/05/19 14:51
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的缓存机制,浪费资源
代码:
@Overridepublic 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会浪费大量时间,依然要进一步优化
代码:
@Overridepublic 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寻找控件
代码:
@Overridepublic 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中的控件设置数据
- BaseAdapter
- baseAdapter
- BaseAdapter
- BaseAdapter
- BaseAdapter
- BaseAdapter
- baseAdapter
- BaseAdapter
- BaseAdapter
- BASEAdapter
- BaseAdapter
- BaseAdapter......
- BaseAdapter
- BaseAdapter
- BaseAdapter
- BaseAdapter
- BaseAdapter
- BaseAdapter
- 把数据导出到Excel表格中的方式
- 从拓扑排序到广度优先搜索到单源最短路径
- iOS Xcode重要配置
- pip的一些问题
- 几种中文分词工具
- BaseAdapter
- hdu1150Machine Schedule(好题)
- C#中WinForm窗体事件的执行次序如下:
- vbs/QTP进程/任务栏操作
- 数据结构 —— 第一个程序 【顺序表】
- UI_UIScrollView(滚动视图)的图文理解
- MySQL语句内求和 选择语句外的表进行查询求和
- SpringMVC注解之@ModelAttribute
- 从零开始搭建高可用IM系统