首页 > 代码库 > View的setTag和getTag使用

View的setTag和getTag使用

在listview 优化当中,会使用到setTag()以及getTag()方法

代码如下:

@Override
			public View getView(int position, View convertView, ViewGroup parent) {
				ViewHolder viewHolder;
			    if(convertView==null){
			    	viewHolder = new ViewHolder();
			    	convertView = inflater.inflate(R.layout.item, null);
			    	viewHolder.tvAge = (TextView) convertView.findViewById(R.id.tvAge);
			    	viewHolder.tvName = (TextView) convertView.findViewById(R.id.tvName);
			    	convertView.setTag(viewHolder);
			    }else{
			    	viewHolder = (ViewHolder) convertView.getTag();
			    }
			    viewHolder.tvAge.setText("年龄:  "+persons.get(position).age);
			    viewHolder.tvName.setText("年龄:  "+persons.get(position).name);
			    
				return convertView;
			}
		}
		class ViewHolder{
			TextView tvAge;
			TextView tvName;
		}

setTag()方法是在View类中,所以所有的类都可以使用setTag()方法,我们看下View源码中代码:

/**
     * Returns this view's tag.
     *
     * @return the Object stored in this view as a tag
     *
     * @see #setTag(Object)
     * @see #getTag(int)
     */
    @ViewDebug.ExportedProperty
    public Object getTag() {
        return mTag;
    }

    /**
     * Sets the tag associated with this view. A tag can be used to mark
     * a view in its hierarchy and does not have to be unique within the
     * hierarchy. Tags can also be used to store data within a view without
     * resorting to another data structure.
     *
     * @param tag an Object to tag the view with
     *
     * @see #getTag()
     * @see #setTag(int, Object)
     */
    public void setTag(final Object tag) {
        mTag = tag;
    }

    /**
     * Returns the tag associated with this view and the specified key.
     *
     * @param key The key identifying the tag
     *
     * @return the Object stored in this view as a tag
     *
     * @see #setTag(int, Object)
     * @see #getTag()
     */
    public Object getTag(int key) {
        if (mKeyedTags != null) return mKeyedTags.get(key);
        return null;
    }
意思是说给view设置标签,setTag()中设置的Object类,所以getTag()方法要强转,一般是View对象携带什么参数,就可以使用setTag方法把参数传递过去就可以

View的setTag和getTag使用