android ViewHolder 使用

时间:2023-03-08 22:31:40

android中使用ListView   ExpandableListView  数据适配器adapter很多都是自己定义,自己定义数据适配器时,要重写getView。重写getView为了不让每次调用时都去分配相关显示控件的空间,用ViewHolder 可以提高性能。在此对ViewHolder 的使用做个记录。

1、概述

ViewHolder 是自己定义的一个内部类。在使用时主要用到了adapter本身的缓存机制,和setTag  getTag 两个函数

2、代码片

private class ViewHolder {
ImageView image;
TextView text;
TextView text2;
Button mButton;

TextView txt_value1;
TextView txt_value2;
}

@Override
public View getView(final int position, View view, ViewGroup viewGroup) {

ViewHolder viewHolder = null;

if (view == null) {
view = layoutInflater.inflate(R.layout.item_image_button_2txt, null);
viewHolder = new ViewHolder();
viewHolder.image = (ImageView) view.findViewById(R.id.imageView1);
viewHolder.text = (TextView) view.findViewById(R.id.textView1);
viewHolder.text2 = (TextView) view.findViewById(R.id.textView2);
viewHolder.mButton = (Button) view.findViewById(R.id.button1);
viewHolder.txt_value1 = (TextView) view.findViewById(R.id.value1);
viewHolder.txt_value2 = (TextView) view.findViewById(R.id.value2);
view.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) view.getTag();
}

//添加要做的显示业务

}

3、note:在使用ViewHolder时不要忘记了先setTag  然后才有getTag 不然肯定是报空指针