Android setTag()/getTag()

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);
  }
时间: 2024-10-12 11:50:08

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

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

(转自:http://www.cnblogs.com/topcoderliu/archive/2011/06/07/2074419.html) [自己经历:要getTag前提是要有setTag] setTag()/getTag() View中的setTag(Onbect)表示给View添加一个格外的数据,以后可以用getTag()将这个数据取出来. 可以用在多个Button添加一个监听器,每个Button都设置不同的setTag.这个监听器就通过getTag来分辨是哪个Button 被按下. i

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

首先我们要知道setTag方法是干什么的,SDK解释为 Tags Unlike IDs, tags are not used to identify views. Tags are essentially an extra piece of information that can be associated with a view. They are most often used as a convenience to store data related to views in the v

【转】setTag()/getTag()

原文网址: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.o

Android setTag方法的key问题

android在设计View类时,为了能储存一些辅助信息,设计一个一个setTag/getTag的方法.这让我想起在Winform设计中每个Control同样存在一个Tag. 今天要说的是我最近学习android遇见的setTag的坑.一般情况下我们只需要使用唯一参数的setTag方法.但有时我们需要存储多个数据,所以这个时候我们就需要使用带key的重载. 文档是描述:“ The specified key should be an id declared in the resources of

What is the main purpose of setTag() getTag() methods of View?

如题:方法setTag(),getTag()在View中起到的作用 为什么我会找到这么一个问题,主要原因就是,我在学习ViewHolder时遇到,当时只知道怎么使用.在google时,发现stackoverflow上有不错的解释.遂翻译一二. 源地址:http://stackoverflow.com/questions/5291726/what-is-the-main-purpose-of-settag-gettag-methods-of-view 释疑: 比如说,你创建了很多个相似的View,

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

转自 http://www.cnblogs.com/qingblog/archive/2012/07/03/2575140.html View中的setTag(Onbect)表示给View添加一个格外的数据,以后可以用getTag()将这个数据取出来. 可以用在多个Button添加一个监听器,每个Button都设置不同的setTag.这个监听器就通过getTag来分辨是哪个Button 被按下. import android.app.Activity; import android.os.Bun

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

原文地址:http://www.cnblogs.com/qingblog/archive/2012/07/03/2575140.html View中的setTag(Onbect)表示给View添加一个格外的数据,以后可以用getTag()将这个数据取出来. 可以用在多个Button添加一个监听器,每个Button都设置不同的setTag.这个监听器就通过getTag来分辨是哪个Button 被按下. Java代码   import android.app.Activity; import and

[Android学习系列13]关于Gridview的一些事

用mvc的思想去理解 数据源,adapter,xxxView的关系,写代码就轻松多了 先写一个简单的gridview 第一版:只有图片 xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent&q

Android 适配器教程(五)

在之前四讲中,我们已经由浅入深的认识了适配器,从最简单的ListView写起,最后完成了自定义适配器的简单例子,这一次咱们就上次留下来的问题 再进行更加深入的学习,主要是getView方法的原理,还有Holder的使用,还有关于ListView性能方面的优化问题.自定义适配器这一部分需要好好的进行理解,只有真正理解的比较透彻,写起来才会比较顺手.这一次就没有例子了,我会配上几张图片,希望能让大家看得明白. 先从ListView的原理来进行讲解吧! 大家先看一张图: 这就是ListView的工作原