zoukankan      html  css  js  c++  java
  • View的setTag()与getTag()方法使用

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

    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对象,存在对象转化 问题。

  • 相关阅读:
    相机标定之四个坐标系及其关系
    VR、AR和MR的区别?
    Django 中使用流响应处理视频的方法
    mysql_num_fielfs_php mysql_num_rows和mysql_num_fields获取结果集总行数和总列数
    mysql中文乱码
    redisson分布式锁:Redis分布式锁报错,Redisson出错:Unable to send command!
    SpringBoot整合redis, RedisTemplate默认使用Lettuce客户端超时问题
    spring security登录后访问接口403 forbidden的坑
    redis锁,redis分布式锁: RedisLock
    微信urlscheme.generate:h5跳转到小程序(支持微信内h5,浏览器)
  • 原文地址:https://www.cnblogs.com/dubo-/p/7727526.html
Copyright © 2011-2022 走看看