android View.setTag()与View.getTag()的作用

这个东西在一些需要用到Adapter自定控件显示方式的时候非常有用
Adapter 有个getView方法,可以使用setTag把查找的view缓存起来方便多次重用

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); 把一个holder放进去 
        } else {
                vh = (ViewHolder) convertView.getTag(); 把里面内容取出来
        }
//其他的代码可以直接使用 vh.view1、vh.view2、vh.view3 、vh.view4


}

View中的setTag(Onbect)表示给View添加一个格外的数据,以后可以用getTag()将这个数据取出来。

可以用在多个Button添加一个监听器,每个Button都设置不同的setTag。这个监听器就通过getTag来分辨是哪个Button 被按下。


 

[java]  view plain copy
  1. import android.app.Activity;   
  2. import android.os.Bundle;   
  3. import android.view.View;   
  4. import android.widget.Button;   
  5.   
  6. public class Main extends Activity {   
  7.   
  8. @Override   
  9. public void onCreate(Bundle savedInstanceState) {   
  10. super.onCreate(savedInstanceState);   
  11. setContentView(R.layout.main);   
  12. Button button1 = (Button) findViewById(R.id.Button01);   
  13. Button button2 = (Button) findViewById(R.id.Button02);   
  14. Button button3 = (Button) findViewById(R.id.Button03);   
  15. Button button4 = (Button) findViewById(R.id.Button04);   
  16. MyListener listener = new MyListener();   
  17. button1.setTag(1);   
  18. button1.setOnClickListener(listener);   
  19. button2.setTag(2);   
  20. button2.setOnClickListener(listener);   
  21. button3.setTag(3);   
  22. button3.setOnClickListener(listener);   
  23. button4.setTag(4);   
  24. button4.setOnClickListener(listener);   
  25. }   
  26.   
  27. public class MyListener implements View.OnClickListener {   
  28.   
  29. @Override   
  30. public void onClick(View v) {   
  31. int tag = (Integer) v.getTag();   
  32. switch (tag) {   
  33. case 1:   
  34. System.out.println("button1 click");   
  35. break;   
  36. case 2:   
  37. System.out.println("button2 click");   
  38. break;   
  39. case 3:   
  40. System.out.println("button3 click");   
  41. break;   
  42. case 4:   
  43. System.out.println("button4 click");   
  44. break;   
  45. }   
  46. }   
  47.   
  48. }   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值