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. Android Fragment之间的通信(用fragment替换掉XML布局文件中的一个线性布局)

    1.XML布局 (1)主界面 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xml ...

  2. P2472 [SCOI2007]蜥蜴

    传送门 求无法逃离的蜥蜴总数的最小值就是求最多逃离的蜥蜴总数 所以显然考虑最大流,一个流量的路径就相当于一只蜥蜴逃离的路径 发现每个位置有一个最大经过次数,所以把每个位置拆成两个点$x,y$,$x$ ...

  3. Git服务器搭建笔记

    前言:最近公司要使用git服务器对Android4.4的源码进行版本控制,所以花了些时间在Ubuntu14.04上搭建了git服务器,正好前段时间也学习了下git的使用哈哈 ------------- ...

  4. Vue-cli3 WARNING in asset size limit: The following asset(s) exceed the recommended size limit (244 KiB)

    在vue.config.js里 添加 configureWebpack : { performance: { hints:'warning', //入口起点的最大体积 整数类型(以字节为单位) max ...

  5. 使用chart.js時取消懸浮在圖表頂部的'undefined'標識

    解決方法:在options中設置legend項中display屬性為false options: { scales: { yAxes: [{ ticks: { beginAtZero: true } ...

  6. pandas中数据框的一些常见用法

    1.创建数据框或读取外部csv文件 创建数据框数据 """ 设计数据 """ import pandas as pd data = {&qu ...

  7. MySQL更改字段名

    更改字段名 alter table tb_name change col_name new_col_name create_definition;

  8. 关于echart x轴溢出的解决办法

    现象 溢出挤在一起,或者默认多余的不显示,如果需要强制显示,需要设置 axisLabel: { interval: 0, } 解决办法: 一.旋转一定的角度 axisLabel: { interval ...

  9. Mongodb定时备份脚本和清除脚本

    Mongodb用的是可以热备份的mongodump和对应恢复的mongorestore,在linux下面使用shell脚本写的定时备份,代码如下 1.定时备份 #!/bin/bash sourcepa ...

  10. AngularJS的日期格式化去掉秒

    <td>订单创建时间:{{item.odatetime.substring(0,16)}}</td>