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

Android之:View的setTag()与getTag()方法使用

2015-04-29 15:30 381 查看
通常我们是用findViewById()方法来取得我们要使用的View控件,不过除了这一种方法之处 ,我们还可以用View中的setTag(Onbect)给View添加一个格外的数据,再用getTag()获取到对应的View。setTag()和getTag()方法常用在处理多个相同的View时,比如我们有要对几个Button添加点击事件,我们除了可以用view.getId()来区分Button,也可以给Button设置Tag来进行区分。如:

public class TagTestActivity extends Activity implements OnClickListener {

private Button tagBtn2,tagBtn3,tagBtn4;

@Override

protected void onCreate(Bundle savedInstanceState) {

// TODO Auto-generated method stub

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

initViews();

dealBtnsListeners();

}

private void initViews() {

tagBtn2=(Button) findViewById(R.id.tag_btn_2);

tagBtn3=(Button) findViewById(R.id.tag_btn_3);

tagBtn4=(Button) findViewById(R.id.tag_btn_4);

}

private void dealBtnsListeners() {

tagBtn2.setOnClickListener(this);

tagBtn3.setOnClickListener(this);

tagBtn4.setOnClickListener(this);

tagBtn2.setTag(2);

tagBtn3.setTag(3);

tagBtn4.setTag(4);

}

@Override

public void onClick(View v) {

//一般我们根据控件的id来判断是哪个Button被点击,这里我们用getTag()来判断

int btnId=(int) v.getTag();

switch (btnId) {

case 2:

Toast.makeText(this, "点击Tag为2的Button", 3000).show();

break;

case 3:

Toast.makeText(this, "点击Tag为3的Button", 3000).show();

break;

case 4:

Toast.makeText(this, "点击Tag为4的Button", 3000).show();

break;

default:

break;

}

}

}

但是Tag最常用的地方并不在上面所讲的。用过ListView的伙伴们对Tag肯定不陌生。为了提高程序性能,我们在给ListView写适配器Adapter的时候,我们就要用到Tag,下面的代码大家肯定有过啦:

static class ViewHolder {

private TextView tagTv01;

private TextView tagTv02;

}



public View getView(int position, View convertView, ViewGroup parent) {

if (convertView == null) {

LayoutInflater inflater = mContext.getLayoutInflater();

convertView = inflater.inflate(R.layout.item_tag, null);

ViewHolder vh = new ViewHolder();

vh.tagTv01 = (TextView)convertView.findViewById(R.id.tagTv01);

vh.tagTv02 = (TextView)convertView.findViewById(R.id.tagTv01);

convertView.setTag(vh);

} else{

vh=(ViewHolder) convertView.getTag();

}

//添加数据........

}

除了以上的两种 情况,我们通常不建议用setTag()和getTag(),主要是考虑到代码的可读性,另外就是setTag(Objcet)中传的是Object对象,存在对象转化 问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: