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

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

  import android.app.Activity;
  import android.os.Bundle;
  import android.view.View;
  import android.widget.Button;
  public class Main extends Activity {
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    Button button1 = (Button) findViewById(R.id.Button01);
    Button button2 = (Button) findViewById(R.id.Button02);
    Button button3 = (Button) findViewById(R.id.Button03);
    Button button4 = (Button) findViewById(R.id.Button04);
    MyListener listener = new MyListener();
    button1.setTag();
    button1.setOnClickListener(listener);
    button2.setTag();
    button2.setOnClickListener(listener);
    button3.setTag();
    button3.setOnClickListener(listener);
    button4.setTag();
    button4.setOnClickListener(listener);   }
  public class MyListener implements View.OnClickListener {
    @Override
    public void onClick(View v) {
      int tag = (Integer) v.getTag();
      switch (tag) {
      case :
        System.out.println("button1 click");
        break;
      case :
        System.out.println("button2 click");
        break;
      case :
        System.out.println("button3 click");
        break;
      case :
        System.out.println("button4 click");
        break;
    }
  }
 }
}

在写listView 时候要重写BaseAdapter

需要在没个item都加上button 点击button做相应操作

这个时候需要button里面设置下 这行的属性

button.setTag(item.user.name);

然后处理button事件。

这个东西在一些需要用到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);
  } else {
    vh = (ViewHolder) convertView.getTag();
  }
  //其他的代码可以直接使用 vh.view1、vh.view2、vh.view3 、vh.view4   }

你可以看看android的源码,特别有listview的,你就会发现这个函数很多时候有妙用!呵呵!

我的一点理解是,绑定数据,特别是绑定数据到view。而且可以用getTag()取得,很方便,而且是任意类型的数据,真的很酷。

在实例BaseAdapter()的getView(position, convertView, par)里有用到。convertView这里会用到setTag() getTag()。就可以生成convertView并复用里面的widget

一直觉得这个东西没啥用setTag(),不过只要能用上 就是比较巧的了

在一个程序中呢 我有好多个button 我想点击一个出现1 点击第二个出现2

Java代码:

for (int i = ; i < ; i++) {
  cells[i] = (ImageView) findViewById(cellIDs[i]);
  cells[cellnumber++].setOnClickListener(new OnClickListener() {
    public void onClick(View v){
      cellClicked(cellnumber, v);
      }
    });
  }

上面的代码效率不高 而且 无论点击哪一个都会出现21 当然这是我逻辑错误,那怎么实现呢?

Java代码:

 OnClickListener listener = new OnClickListener() {
    public void onClick(View v) {
      int cellId = (Integer) v.getTag();
      cellClicked(cellId, v);
    }
  }
  View v;
  for (int i = ; i < ; i++) {
    v = findViewById(cellIDs[i]);
    v.setOnClickListener(listener);
    v.setTag(i);
  }

Android setTag()/getTag()的更多相关文章

  1. Android setTag()/getTag()-(转)

    (转自:http://www.cnblogs.com/topcoderliu/archive/2011/06/07/2074419.html) [自己经历:要getTag前提是要有setTag] se ...

  2. Android setTag()与getTag(),与set多个setTag()

    首先我们要知道setTag方法是干什么的,SDK解释为 Tags Unlike IDs, tags are not used to identify views. Tags are essential ...

  3. Android setTag方法的key问题

    android在设计View类时,为了能储存一些辅助信息,设计一个一个setTag/getTag的方法.这让我想起在Winform设计中每个Control同样存在一个Tag. 今天要说的是我最近学习a ...

  4. 【转】setTag()/getTag()

    原文网址:http://www.cnblogs.com/topcoderliu/archive/2011/06/07/2074419.html View中的setTag(Onbect)表示给View添 ...

  5. Android setTag IllegalArgumentException

    E/AndroidRuntime(19480): java.lang.IllegalArgumentException: The key must be an application-specific ...

  6. 在getview方法中有三个参数,起到优化的部分为ViewHolder的使用,主要方法setTag(),getTag()

    适配器代码如下: public class Myadapter extends BaseAdapter { List<String> date; Context context; //构造 ...

  7. view的setTag() 和 getTag()应用 (转)

    原文地址:http://www.cnblogs.com/qingblog/archive/2012/07/03/2575140.html View中的setTag(Onbect)表示给View添加一个 ...

  8. view的setTag() 和 getTag()应用 ViewHolder

    转自 http://www.cnblogs.com/qingblog/archive/2012/07/03/2575140.html View中的setTag(Onbect)表示给View添加一个格外 ...

  9. setTag()与getTag()的使用介绍

    转载博客:http://www.cnblogs.com/topcoderliu/archive/2011/06/07/2074419.html View中的setTag(Onbect)表示给View添 ...

随机推荐

  1. [SCOI2018]游泳池(计算几何+分数规划+最大权闭合子图)

    题目链接 https://www.luogu.org/problemnew/show/U56187 注:题面参考了网上的其他博客,并非原题题面,因此数据范围可能有误.数据为原创数据. 题解 其实就是许 ...

  2. hdu4496-D-city--逆序并查集

    D-City Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)Total Subm ...

  3. python 类,对象

    声明类 ''' class 类名: '类的文档字符串' 类体 ''' #我们创建一个类 class Data: pass 声明类 class Person: #定义一个人类 role = 'perso ...

  4. (转)nginx 常用模块整理

    原文:http://blog.51cto.com/arm2012/1977090 1. 性能相关配置 worker_processes number | auto: worker进程的数量:通常应该为 ...

  5. vim实战:插件安装(Vundle,NerdTree)

    一:插件管理器Vundle 1.简介 Vundle是vim的一个插件管理器, 同时它本身也是vim的一个插件.插件管理器用于方便.快速的安装.删除.Vim更新插件.vim Vundle插件官方地址:h ...

  6. Vi/Vim命令壁纸图

    下载地址 http://pan.baidu.com/s/1mtQdY

  7. spring自定义标签之 自我实现

     引言: 最近心情比较难以平静,周末的两天就跑出去散心了,西湖边上走走,看日落,还是不错的.回来博客上发现,在自定义标签上,最后一步实现忘记加上了.其实,人生的路程中,我们总是实现着自我的价值,让自己 ...

  8. SpringMVC的数据回现

    一.什么是数据回显 数据提交后,如果出现错误,将刚才提交的数据回显到刚才的提交页面. 二.pojo数据回显方法 1.springmvc默认对pojo数据进行回显. pojo数据传入controller ...

  9. Sed - An Introduction and Tutorial by Bruce Barnett

    http://www.grymoire.com/unix/sed.html Quick Links - NEW Sed Commands : label # comment {....} Block ...

  10. Git命令学习笔记

    一.本地代码增,删,改,查,提交,找回git checkout .                //抛弃工作区所有修改git checkout -- <file>    //抛弃工作区& ...