android使用ViewHolder对ListView进行优化


使用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;
	}

}

转载于:https://my.oschina.net/zhaoweizhang/blog/666248

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值