博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
自定义适配器视图getview实现方法比较
阅读量:4616 次
发布时间:2019-06-09

本文共 1775 字,大约阅读时间需要 5 分钟。

  Android开发之中,listview是一个非常重要的组件,它以列表的形式显示用户的数据,用户可以自由的定义LsitView每一列的内容,样式,很多时候使用ListView都需要使用自定义Adapter,自定义Adapter之中最重要的莫过于getView方法了。

  getView方法实现主要的三种方法:

  1、第一种就是每次都给adapter new一个View载入布局。

    例如:

public View getView(int position, View convertView, ViewGroup parent) { View item = mInflater.inflate(R.layout.list_item_icon_text, null); ((TextView) item.findViewById(R.id.text)).setText(DATA[position]); ((ImageView) item.findViewById(R.id.icon)).setImageBitmap( (position & 1) == 1 ? mIcon1 : mIcon2); return item;}

  使用这种方式会占据大量内存,十分影响性能(不建议使用)

  2、当convertView不为空的时候直接重新使用convertView从而减少了很多不必要的View的创建,然后加载数据。

public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = mInflater.inflate(R.layout.item, parent, false); } ((TextView) convertView.findViewById(R.id.text)).setText(DATA[position]); ((ImageView) convertView.findViewById(R.id.icon)).setImageBitmap( (position & 1) == 1 ? mIcon1 : mIcon2); return convertView; }

  这种方式每次都要判断view回收池之中是否有可用的view,如果有则重用;如果没有则,新建View。(可以使用)

  3、最快的一种方式:定义一个ViewHolder,将convetView的tag设置为ViewHolder,不为空时重新使用即可

static class ViewHolder {TextView text;ImageView icon;} public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder;  if (convertView == null) { convertView = mInflater.inflate(R.layout.list_item_icon_text, parent, false); holder = new ViewHolder(); holder.text = (TextView) convertView.findViewById(R.id.text); holder.icon = (ImageView) convertView.findViewById(R.id.icon); convertView.setTag(holder);} else {holder = (ViewHolder) convertView.getTag();}holder.text.setText(DATA[position]);holder.icon.setImageBitmap((position & 1) == 1 ? mIcon1 : mIcon2);return convertView;}

  (推荐使用)

 

转载于:https://www.cnblogs.com/haonima/p/3901636.html

你可能感兴趣的文章
几种数据库获取系统的时间
查看>>
SIMD数据并行(四)——三种结构的比较
查看>>
R语言之读取本地文件注意事项
查看>>
关于Ubuntu10.04磁盘空间不足的问题
查看>>
AMD、CMD、CommonJs和 ES6对比
查看>>
Windows Phone 7 Belling‘s课堂(九) LINQ to SQL语句
查看>>
Python 学习笔记5
查看>>
python协程函数、递归、匿名函数与内置函数使用、模块与包
查看>>
[ConcurrencyCheck]并发检查
查看>>
NOIP2016普及总结
查看>>
springMVC学习总结(一) --springMVC搭建
查看>>
Flutter中通过https post Json接收Json
查看>>
负载均衡
查看>>
Linux环境下连接Mssql 2008
查看>>
Compiling wxWidgets
查看>>
c语言日历系统的设计与部分实现
查看>>
BZOJ 1770: [Usaco2009 Nov]lights 燈( 高斯消元 )
查看>>
NYOJ 478
查看>>
Mac 配置几个环境变量
查看>>
10.10
查看>>