文档章节

android使用ViewHolder对ListView进行优化

Stepkim
 Stepkim
发布于 2016/04/26 10:45
字数 356
阅读 16
收藏 0


使用ViewHolderListView进行优化,可以使ListView减少很多不必要的重复操作


自定义一个内部类,把adapter中的控件放在里面声明,初始化控件的时候判断convertView是否为空,若是为空的话则按照常规初

始化,然后在后面加上convertView.setTag(viewHolder);      当下一次执行时,若convertView不为空,则可以直接使用

viewHolder = (ViewHolder) convertView.getTag();来对控件进行初始化,这样可以省去很多的不必要操作,示例代码如下:

public class MenuItemAdapter extends BaseAdapter {

	private List<Map<String, String>> data;
	Context context;

	public MenuItemAdapter(Context context, List<Map<String, String>> data) {
		// TODO 自动生成的构造函数存根
		this.context = context;
		this.data = data;
	}

	@Override
	public int getCount() {
		// TODO 自动生成的方法存根
		return data.size();
	}

	@Override
	public Object getItem(int position) {
		// TODO 自动生成的方法存根
		return data.get(position);
	}

	@Override
	public long getItemId(int position) {
		// TODO 自动生成的方法存根
		return position;
	}

	@SuppressLint("ViewHolder")
	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		// TODO 自动生成的方法存根
		ViewHolder viewHolder = null;
		if (null == convertView) {
			convertView = LayoutInflater.from(context).inflate(
					R.layout.adapter_menuitem, null);
			viewHolder.menuitem_layout = (LinearLayout) convertView
					.findViewById(R.id.menuitem_layout);
			viewHolder.image_item = (ImageView) convertView
					.findViewById(R.id.image_item);
			viewHolder.dishes_item = (TextView) convertView
					.findViewById(R.id.dishes_item);
			viewHolder.price_item = (TextView) convertView
					.findViewById(R.id.price_item);
			viewHolder.order_btn = (Button) convertView
					.findViewById(R.id.order_btn);
			convertView.setTag(viewHolder);
		} else {
			viewHolder = (ViewHolder) convertView.getTag();
		}

		viewHolder.dishes_item.setText(data.get(position).get("meal_name"));
		viewHolder.price_item.setText("价格:" + data.get(position).get("price"));

		if (position % 2 != 0) {
			viewHolder.menuitem_layout.setBackgroundColor(Color
					.parseColor("#2c2c2c"));
		}

		return convertView;
	}

	private static class ViewHolder {	//使用ViewHolder优化ListView的性能,减少一些不必要的重复操作
		ImageView image_item;
		TextView dishes_item, price_item;
		Button order_btn;
		LinearLayout menuitem_layout;
	}

}

© 著作权归作者所有

Stepkim
粉丝 1
博文 19
码字总数 4416
作品 0
东莞
程序员
私信 提问
图灵问答机器人API调用实例

问答机器人API文档:https://www.juhe.cn/docs/api/id/112 先上图: 说下大致实现的步骤: 1、首先使用了聚合数据的sdk,这样免费使用的数目可以多一些 2、使用gson来解析json数据 3、使用L...

夜晚晚
2016/10/27
373
0
Android:这是一份全面 & 详细的RecylerView学习攻略

前言 在开发中十分常见 今天,我将为大家带来的全面介绍,包括其定义、特点、具体使用等,希望你们会喜欢。 目录 1. 简介 //设置布局管理器mRecyclerView.setLayoutManager(layout);//设置a...

Carson_Ho
08/28
0
0
Android关于ListView的优化

当使用自定义Adapter来创建ListView时,注意以下几点,可以起到优化的作用: 在XML文件布局ListView时,android:layoutheight不要定义为wrapcontent,并且ListView的所有父节点布局的android...

小牛仔
2015/01/13
156
0
Android listview viewholder

Android ListView ViewHolder 利用adapter中的getView的 contentView 的复用机制进行优化。 listview的原理 listView,初始化的时候就会使用inflater来渲染这些view(这些是耗费资源的操作),...

Jay_kyzg
2018/07/11
24
0
Android开发优化之——从代码角度进行优化

通常我们写程序,都是在项目计划的压力下完成的,此时完成的代码可以完成具体业务逻辑,但是性能不一定是最优化的。一般来说,优秀的程序员在写完代码之后都会不断的对代码进行重构。重构的好...

KingMing
2015/04/03
37
0

没有更多内容

加载失败,请刷新页面

加载更多

左边竖条的实现方法

下面这个图形,只使用一个标签,可以有多少种实现方式: 假设我们的单标签是一个 div : 1 < div > div> 定义如下通用CSS: 1 2 3 4 5 6 div{ position : relative ; width : 200px ; height ...

前端老手
33分钟前
2
0
java利用ECHARTS.JS在前台显示图表

步骤1: (1)在java后台,使用MSQL分组函数,列出所有线在对应的点的值, (2)组成的Map如图所示: 注意: key为0的value表示X轴需要的数据;key为其他的值表示图表线条的名字,value为x轴的点对应的y...

文文1
36分钟前
6
0
解题博客

https://blog.csdn.net/hk2291976/article/category/9265848

素雷
今天
4
0
linux-ubuntu下使用linuxdeployqt+appimagetool将qt程序打包成xxx.AppImage文件

下文中提及的inuxdeployqt patchelf appimagetool工具及示例下载地址: 链接: https://pan.baidu.com/s/1BGm_btMIe75uW9hOC09Xlg 提取码: 7ayh 需要创建目录及文件 xxx.AppDir xxx.AppDir/Ap...

shzwork
今天
5
0
javascript-ASCII码混合四位随机验证码

// 产生一个随机字符库:数字大写小写的数量是对应的 function randomStr(){ // 产生库 var strData = ""; for(var i=0;i<4;i++){ var num = random(0,9); var az = String.fromCharCode(ra......

ACKo
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部