原文地址:http://www.cnblogs.com/qingblog/archive/2012/07/03/2575140.html

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

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

  1. import android.app.Activity;
  2. import android.os.Bundle;
  3. import android.view.View;
  4. import android.widget.Button;
  5. public class Main extends Activity {
  6. @Override
  7. public void onCreate(Bundle savedInstanceState){
  8. super.onCreate(savedInstanceState);
  9. setContentView(R.layout.main);
  10. Button button1 = (Button) findViewById(R.id.Button01);
  11. Button button2 = (Button) findViewById(R.id.Button02);
  12. Button button3 = (Button) findViewById(R.id.Button03);
  13. Button button4 = (Button) findViewById(R.id.Button04);
  14. MyListener listener = new MyListener();
  15. button1.setTag(1);
  16. button1.setOnClickListener(listener);
  17. button2.setTag(2);
  18. button2.setOnClickListener(listener);
  19. button3.setTag(3);
  20. button3.setOnClickListener(listener);
  21. button4.setTag(4);
  22. button4.setOnClickListener(listener);
  23. }
  24. public class MyListener implements View.OnClickListener {
  25. @Override
  26. public void onClick(View v) {
  27. int tag = (Integer) v.getTag();
  28. switch (tag){
  29. case 1:
  30. System.out.println("button1 click");
  31. break;
  32. case 2:
  33. System.out.println("button2 click");
  34. break;
  35. case 3:
  36. System.out.println("button3 click");
  37. break;
  38. case 4:
  39. System.out.println("button4 click");
  40. break;
  41. }
  42. }
  43. }
  44. }
  1. import android.app.Activity;
  2. import android.os.Bundle;
  3. import android.view.View;
  4. import android.widget.Button;
  5. public class Main extends Activity {
  6. @Override
  7. public void onCreate(Bundle savedInstanceState){
  8. super.onCreate(savedInstanceState);
  9. setContentView(R.layout.main);
  10. Button button1 = (Button) findViewById(R.id.Button01);
  11. Button button2 = (Button) findViewById(R.id.Button02);
  12. Button button3 = (Button) findViewById(R.id.Button03);
  13. Button button4 = (Button) findViewById(R.id.Button04);
  14. MyListener listener = new MyListener();
  15. button1.setTag(1);
  16. button1.setOnClickListener(listener);
  17. button2.setTag(2);
  18. button2.setOnClickListener(listener);
  19. button3.setTag(3);
  20. button3.setOnClickListener(listener);
  21. button4.setTag(4);
  22. button4.setOnClickListener(listener);
  23. }
  24. public class MyListener implements View.OnClickListener {
  25. @Override
  26. public void onClick(View v) {
  27. int tag = (Integer) v.getTag();
  28. switch (tag){
  29. case 1:
  30. System.out.println("button1 click");
  31. break;
  32. case 2:
  33. System.out.println("button2 click");
  34. break;
  35. case 3:
  36. System.out.println("button3 click");
  37. break;
  38. case 4:
  39. System.out.println("button4 click");
  40. break;
  41. }
  42. }
  43. }
  44. }

在写listView 时候要重写BaseAdapter 
需要在每个item都加上button 点击button做相应操作 
这个时候需要button里面设置下 这行的属性button.setTag(item.user.name); 
然后处理button事件。 
这个东西在一些需要用到Adapter自定控件显示方式的时候非常有用 
Adapter 有个getView方法,可以使用setTag把查找的view缓存起来方便多次重用 

  1. public View getView(int position, View convertView, ViewGroup parent) {
  2. ViewHolder vh;
  3. if (convertView == null){
  4. LayoutInflater inflater = (LayoutInflater) mWidgetsSwitchApp .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  5. convertView = inflater.inflate(R.layout.app_gallery_item, null);
  6. vh = new ViewHolder();
  7. vh.view1 = (ImageView) convertView.findViewById(R.id.view1);
  8. vh.view2 = (ImageView) convertView.findViewById(R.id.view2);
  9. vh.view3= (ImageView) convertView.findViewById(R.id.view3);
  10. vh.view4 = (ImageView) convertView.findViewById(R.id.view4);
  11. convertView.setTag(vh);
  12. }else{
  13. vh = (ViewHolder) convertView.getTag();
  14. }
  15. //其他的代码可以直接使用 vh.view1、vh.view2、vh.view3 、vh.view4
  16. }
  1. public View getView(int position, View convertView, ViewGroup parent) {
  2. ViewHolder vh;
  3. if (convertView == null){
  4. LayoutInflater inflater = (LayoutInflater) mWidgetsSwitchApp .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  5. convertView = inflater.inflate(R.layout.app_gallery_item, null);
  6. vh = new ViewHolder();
  7. vh.view1 = (ImageView) convertView.findViewById(R.id.view1);
  8. vh.view2 = (ImageView) convertView.findViewById(R.id.view2);
  9. vh.view3= (ImageView) convertView.findViewById(R.id.view3);
  10. vh.view4 = (ImageView) convertView.findViewById(R.id.view4);
  11. convertView.setTag(vh);
  12. }else{
  13. vh = (ViewHolder) convertView.getTag();
  14. }
  15. //其他的代码可以直接使用 vh.view1、vh.view2、vh.view3 、vh.view4
  16. }

你可以看看android的源码,特别有listview的,你就会发现这个函数很多时候有妙用!呵呵! 
我的一点理解是,绑定数据,特别是绑定数据到view。而且可以用getTag()取得,很方便,而且是任意类型的数据,真的很酷。 
在实例BaseAdapter()的getView(position, convertView, par)里有用到。convertView这里会用到setTag() getTag()。就可以生成convertView并复用里面的widget 
一直觉得这个东西没啥用setTag(),不过只要能用上 就是比较巧的了 
在一个程序中呢 我有好多个button 我想点击一个出现1 点击第二个出现2

  1. for (int i = 0; i < 20; i++) {
  2. cells[i] = (ImageView) findViewById(cellIDs[i]);
  3. cells[cellnumber++].setOnClickListener(new OnClickListener() {
  4. public void onClick(View v){
  5. cellClicked(cellnumber, v);
  6. }
  7. });
  8. }
  1. for (int i = 0; i < 20; i++) {
  2. cells[i] = (ImageView) findViewById(cellIDs[i]);
  3. cells[cellnumber++].setOnClickListener(new OnClickListener() {
  4. public void onClick(View v){
  5. cellClicked(cellnumber, v);
  6. }
  7. });
  8. }

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

  1. OnClickListener listener = new OnClickListener() {
  2. public void onClick(View v){
  3. int cellId = (Integer) v.getTag(); cellClicked(cellId, v);
  4. }
  5. }
  6. View v;
  7. for (int i = 0; i < 20; i++){
  8. v = findViewById(cellIDs[i]);
  9. v.setOnClickListener(listener);
  10. v.setTag(i);
  11. }
  1. OnClickListener listener = new OnClickListener() {
  2. public void onClick(View v){
  3. int cellId = (Integer) v.getTag(); cellClicked(cellId, v);
  4. }
  5. }
  6. View v;
  7. for (int i = 0; i < 20; i++){
  8. v = findViewById(cellIDs[i]);
  9. v.setOnClickListener(listener);
  10. v.setTag(i);
  11. }

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

view的setTag() 和 getTag()应用 (转)的更多相关文章

  1. View的setTag和getTag方法

    ---恢复内容开始--- public View getView(int position, View convertView, ViewGroup parent) { Msg msg =getIte ...

  2. View 的setTag() 和 getTag()

    View 的setTag() 和 getTag()ImageView.setTag(""); 就是当多个ImageView用到一个监听器时,能触发不同的情况,是View的方法 Ad ...

  3. View的setTag()与getTag()方法使用

    通常我们是用findViewById()方法来取得我们要使用的View控件,不过除了这一种方法之处 ,我们还可以用View中的setTag(Onbect)给View添加一个格外的数据,再用getTag ...

  4. android:View的setTag和getTag使用

    1.用于区分非常多类似的View 比如: button1.setOnClickListener(new OnClickListener ... ); button2.setOnClickListene ...

  5. View的setTag和getTag使用

    在listview 优化其中,会使用到setTag()以及getTag()方法 代码例如以下: @Override public View getView(int position, View con ...

  6. android:View的setTag和getTag

    Adapter 有个getView方法,可以使用setTag把查找的view缓存起来方便多次重用 public View getView(int position, View convertView, ...

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

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

  8. view中的setTag和getTag方法的理解

    下面是一段自定义适配器中的getView方法,其中使用了view的一个setTag和getTag方法 View中的setTag(Onbect)表示给View添加一个格外的数据(相当于缓存),以后可以用 ...

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

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

随机推荐

  1. 【leetcode】Word Search

    Word Search Given a 2D board and a word, find if the word exists in the grid. The word can be constr ...

  2. POJ 1068

    http://poj.org/problem?id=1068 这道题是一道模拟的题目 题目大意呢,p代表前面的'('的个数,而w代表这个括号所包括的括号的个数: 给你p,要你求w: 解题思路: 首先, ...

  3. linux mysql查看安装信息

    ps -ef|grep mysql root               ?        :: /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mys ...

  4. Apache2.4.6 添加虚拟主机

    apache2.4 与 apache2.2 的虚拟主机配置写法有所不同 apache2.2的写法: <VirtualHost *:80> ServerName domain.com Doc ...

  5. ios8 新增的 showViewController 和 showDetailViewController

    1.showViewController 先看看说明: You use this method to decouple the need to display a view controller fr ...

  6. serv-u启动管理控制台后提示脚本错误解决方案

             问题描述: 安装serv-u后打开管理控制台,提示“脚本错误“控制台界面无法正常显示: 解决方法: 1.在serv-u安装目录下找到”Serv-U-DefaultCertificat ...

  7. nginx 原理&知识

    2015年6月4日 17:04:20 星期四 发现两个关于nginx原理的系列文章, 非常好 http://blog.sina.com.cn/s/blog_6d579ff40100wi7p.html ...

  8. java 入门 第二季2

    (1). 封装 封装类的时候属性用private,方法getter和setter用public 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问 ...

  9. Django~NewProject and APP

    New Project 1.新建 django-admin startproject mysite 2.运行 manage.py runserver 8080 New APP 1.manage.py ...

  10. 修改EsayUi 中 tree 的原有样式,变为according 之类的样式 ,且子菜单显示在右侧

    easyUi 中 tree 框架的属性有: 修改原有展开样式代码如下: onExpand:function(node,param){ $(this).children("li"). ...