原文网址:http://www.cnblogs.com/topcoderliu/archive/2011/06/07/2074419.html

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(1);

  button1.setOnClickListener(listener);

  button2.setTag(2);

  button2.setOnClickListener(listener);

  button3.setTag(3);

  button3.setOnClickListener(listener);

  button4.setTag(4);

  button4.setOnClickListener(listener);

  }

  public class MyListener implements View.OnClickListener {

  @Override

  public void onClick(View v) {

  int tag = (Integer) v.getTag();

  switch (tag) {

  case 1:

  System.out.println("button1 click");

  break;

  case 2:

  System.out.println("button2 click");

  break;

  case 3:

  System.out.println("button3 click");

  break;

  case 4:

  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 = 0; i < 20; 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 = 0; i < 20; i++) {

  v = findViewById(cellIDs[i]);

  v.setOnClickListener(listener);

  v.setTag(i);

  }

  这样呢就实例话一个listener,同时通过tag传值就不是每一个实例都做了

【转】setTag()/getTag()的更多相关文章

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

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

  2. Android setTag()/getTag()

    View中的setTag(Onbect)表示给View添加一个格外的数据,以后可以用getTag()将这个数据取出来. 可以用在多个Button添加一个监听器,每个Button都设置不同的setTag ...

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

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

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

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

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

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

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

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

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

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

  8. Android setTag方法的key问题

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

  9. Duilib源码分析(四)绘制管理器—CPaintManagerUI—(前期准备二)

    接下来,我们继续分析UIlib.h文件中余下的文件,当然部分文件可能顺序错开分析,这样便于从简单到复杂的整个过程的里面,而避免一开始就出现各种不理解的地方. 1. UIManager.h:UI管理器, ...

随机推荐

  1. PHP之list()函数讲解

    定义和用法 list() 函数用数组中的元素为一组变量赋值. 注意,与 array() 类似,list() 实际上是一种语言结构,不是函数. 语法 list(var1,var2...) 参数 描述 v ...

  2. HTTP请求报文与响应报文

    http://docs.telerik.com/fiddler/KnowledgeBase/HTTP HTTP请求报文与响应报文 HTTP http://www.w3.org/Protocols/rf ...

  3. 查看 dmp 字符集

    用Oracle的exp工具导出的dmp文件也包含了字符集信息,dmp文件的第2和第3个字节记录了dmp文件的字符集.如果dmp文件不大,比如只有几M或几十M,可以用UltraEdit打开(16进制方式 ...

  4. kill 非法用户

    主要涉及到的相关命令如:who/w/ps/kill/pkill/killall查看当前登录用户:[root@localhost ~]# whoroot     pts/1        2010-08 ...

  5. hdu 1753 大明A+B

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1753 容易出错的事例: 0.1 0.2 1.88 22.22 1 0.01 大概出错的几个点,做久了思维根 ...

  6. 独立IP与共享IP的区别

    做网站选择独立IP还是共享IP,相信很多站长都在此纠结过,自己不使用服务器的时候从来没有关心过独立IP和共享IP的究竟有什么具体的差别.但当自己真正用到的时候,才发现:同样都是 IP,差别不是一般的大 ...

  7. 套题T3

    秋实大哥与线段树 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit  ...

  8. Project Euler 75:Singular integer right triangles

    题目链接 原题: It turns out that 12 cm is the smallest length of wire that can be bent to form an integer ...

  9. React测试Mixin

    1.test.jsx var randomNumberMixin = require("./randomNumberMixin.jsx"); describe("test ...

  10. 内存分配方法 kmalloc()、vmalloc()、__get_free_pages()

    Copyright: 该文章版权由潘云登所有.可在非商业目的下任意传播和复制. 对于商业目的下对本文的任何行为需经作者同意. kmalloc #include <linux/slab.h> ...