您的位置:首页 > 移动开发 > Android开发

android使用ViewHolder对ListView进行优化

2015-09-12 17:42 495 查看
使用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);
4000
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;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: