程序员人生 网站导航

[置顶] Android之:View的setTag()与getTag()方法使用

栏目:综合技术时间:2015-06-04 08:26:14

  通常我们是用findViewById()方法来获得我们要使用的View控件,不过除这1种方法的地方 ,我们还可以用View中的setTag(Onbect)给View添加1个格外的数据,再用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) {
//1般我们根据控件的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对象,存在对象转化 问题。

------分隔线----------------------------
------分隔线----------------------------

最新技术推荐