首先我们使用ViewHolder 就是为了在RecyclerView 滚动时设置值的
在我们使用ListView或者RecyclerView时, 当有大量的数据需要加载的时候,会占据大量内存,影响性能,这时候就需要按需填充并重新使用view来减少对象的创建。
静态类ViewHolder: 作用就是减少不必要的findViewById, 然后将底下的控件引用存在ViewHolder里面, 再在View.setTag(holder)把它放在view 里面, 这样一来下次就可以直接取了
convertView中的TAG:
Tag从本质上来讲是就是相关联的view的额外的信息。它们经常用来存储一些view的数据,这样做非常方便而不用存入另外的单独结构。
setTag方法:( 例如button1.setTag(1) ) 他是给View对象的一个标签。标签可以是任何内容,我们这里把他设置成了一个对象,因为我们是把vlist2.xml的元素抽象出来成为一个类ViewHolder,用了setTag,这个标签就是ViewHolder实例化后对象的一个属性。我们之后对于ViewHolder实例化的对象holder的操作,都会因为java的引用机制而一直存活并改变convertView的内容,而不是每次都是去new一个, 把重加载换做重用, 提升性能
......
button1.setTag(1);
button2.setTag(2);
button3.setTag(3);
button1.setOnClickListener(this);
}
@Override
public void onClick(View v) {
int tag = (Integer) v.getTag();
switch (tag) {
case 1: {
Toast.makeText(this, "button1", Toast.LENGTH_LONG).show();
break;
}
case 2: {
Toast.makeText(this, "button2", Toast.LENGTH_LONG).show();
break;
}
case 3: {
Toast.makeText(this, "button3", Toast.LENGTH_LONG).show();
break;
}
default: {
break;
}
}
......