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 {@Overridepublic 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 {@Overridepublic 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);}
Android setTag()/getTag()相关推荐
- android tag的使用方法,Android setTag方法的key问题解决办法
android在设计View类时,为了能储存一些辅助信息,设计一个一个setTag/getTag的方法.这让我想起在Winform设计中每个Control同样存在一个Tag. 今天要说的是我最近学习a ...
- Android setTag和getTag()的使用
首先我们要知道setTag方法是干什么的,SDK解释为 Tags Unlike IDs, tags are not used to identify views. Tags are essential ...
- Android setTag 使用
setTag 可给控件附加存储任意类型 值 1. setTag(Object object) 当只需要存储一个的时候使用. view.setTag(Object tag) view.getTag(); ...
- Android开发之适配器-ListView适配器的重复数据
适配器是Android中的数据与View视图的桥梁,作用就是将数据通过适配器显示到对应的View视图上. 工作中,在用ListView做适配器数据时候,有些人肯定碰见过,如何优化效率,但是又出现重复数 ...
- Android 百度鹰眼 SDK
1.创建鹰眼服务 进入鹰眼轨迹管理台 http://lbsyun.baidu.com/trace/admin/service 创建服务 获取到服务ID158542 2.下载demo http://lb ...
- Android 接入华为通知栏推送教程(特此整理)
前言: 受华为开发者联盟工作人员的邀约,特此将本篇博客重新整理一遍,希望让更多人受益,大家也可以参加华为开发者联盟推出活动,去提问自己的问题或者投稿. 扫二维码就可以参与活动哦. 首先本教程是基于华为 ...
- 安卓第八夜 玛丽莲梦露
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 上一讲说明了数据库中存取数据的方法.这一讲将以条目的视图方式,来以相似的视图方式, ...
- 百度地图轨迹(Andriod SDK)
项目结构 BaseActivity.java package siso.track.activity;import android.app.Activity; import android.os.Bu ...
- 【Mark 】AndroidStudio_移动应用开发
Content Android开发环境的配置与准备 Android 概述 Android UI 开发 Activity 数据存储 UI进阶 内容提供者 广播接收者 服务 什么是 Android? 安卓 ...
最新文章
- 成为Python大牛必须要掌握的高端语法(附链接代码)
- C++学习手记四:继承和多态
- ((ios开发学习笔记五))手动创建Tab Bar Controller 程序
- 北风设计模式课程---13、享元模式
- Redis -基础命令
- php中json_decode返回数组或对象的实例
- 龙芯.NET正式发布 稳步推进生态建设
- python连接mysql用哪个模块_Python连接MySQL数据库之pymysql模块使用
- iphone 流媒体
- Vue Nginx反向代理配置 解决生产环境跨域
- http://blog.csdn.net/evankaka/article/details/45155047
- net framework 4.0安装未成功,原因是?
- Python--图片转字符画
- 农夫山泉下场当“烧水工”,熟水市场是“鸡肋”还是“机遇”?
- 训练集和验证集的划分
- emacs java_Emacs配置与使用
- Win10系统新款便笺便签居然可以这么好用
- csdn竟然还有这种神器!后悔没有早点知道!超好用的csdn插件,别再犹豫了,赶快入手吧!
- python在手机上可以画图吗_python简单画图教程!python怎么在屏幕上画图
- 关闭虚拟机linux防火墙命令