在重写adapter的getView方法的时候经常会用到View类的setTag和隔天Tag方法,这个两个方法到底做什么的呢。
先贴一段代码:
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder vh;
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) mWidgetsSwitchApp
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.app_gallery_item, null);
vh = new ViewHolder();
vh.view1 = (ImageView) convertView.findViewById(R.id.view1);
vh.view2 = (ImageView) convertView.findViewById(R.id.view2);
vh.view3= (ImageView) convertView.findViewById(R.id.view3);
vh.view4 = (ImageView) convertView.findViewById(R.id.view4);
convertView.setTag(vh);
} else {
vh = (ViewHolder) convertView.getTag();
}
ViewHolder是一个adapter的内部类,来持有view的, View中的setTag(Object)表示给View添加一个格外的数据,以后可以用getTag()将这个数据取出来。 这样在convertView!=null的时候就不必再次去布局文件里找View了,直接调用getTag把持有View的ViewHolder拿出来就可以了。