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. CDQZ Day4

    NOIP 模拟题By liu_runda题目名称 数 论 题源程序文件名 number.cpp theory.cpp problem.cpp输入文件名 number.in theory.in prob ...

  2. python 小练习('''产生了多少个对象''')('''模拟两个英雄,昵称,攻击力,生命值''')

    '''小练习 计数器,产生了多少个对象''' # class Student: # school = 'luffycity' # count = 0 # def __init__(self, name ...

  3. 2.使用ngx_http_auth_basic_module模块为不带认证的资源添加授权

    1.首先需要生成用户名和密码 使用openssl来生成,生成命令(openssl在安装nginx的时候已经安装) echo "kibana:$(openssl passwd -crypt y ...

  4. C++模(mú )板秘籍

    秘籍?想看我的秘籍?在硬盘上呢.就不给你看!

  5. 小程序 - 分包加载上限8M(一)

    使用分包 配置方法 假设支持分包的小程序目录结构如下 ├── app.js ├── app.json ├── app.wxss ├── packageA │   └── pages │   ├── c ...

  6. ffmpeg intro - pull and push

    ffmpeg -i rtmp://rtmp.test.com/live/livestream -c:v copy -c:a copy -f flv rtmp://172.31.11.53/myhls/ ...

  7. C# Stopwatch 类

    命名空间:System.Diagnostics Stopwatch 实例可以测量一个时间间隔的运行时间,也可以测量多个时间间隔的总运行时间.在典型的 Stopwatch 方案中,先调用 Start 方 ...

  8. orcale 之 集合操作

    集合操作就是将两个或者多个 sql 查询的结果合并成复合查询.常见的集合操作有UNION(并运算).UNION ALL.INTERSECT(交运算)和MINUS(差运算). UNION UNION 运 ...

  9. Mutex,Monitor,lock,MethodImplAttribute,SynchronizedAttribute的用法差异

    1)Mutex:进程之间的同步(互斥量). 2)lock/Monitor……:线程同步.其中lock是Monitor的简化版本(直接生成try{Monitor.Enter(……)}finally{Mo ...

  10. SQL Developer 改成英文