view的setTag() 和 getTag()应用 (转)
原文地址:http://www.cnblogs.com/qingblog/archive/2012/07/03/2575140.html
可以用在多个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;
- }
- }
- }
- }
- 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
- }
- 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
- 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);
- }
- });
- }
- 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 当然这是我逻辑错误那怎么实现呢
- 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);
- }
- 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传值就不是每一个实例都做了
view的setTag() 和 getTag()应用 (转)的更多相关文章
- View的setTag和getTag方法
---恢复内容开始--- public View getView(int position, View convertView, ViewGroup parent) { Msg msg =getIte ...
- View 的setTag() 和 getTag()
View 的setTag() 和 getTag()ImageView.setTag(""); 就是当多个ImageView用到一个监听器时,能触发不同的情况,是View的方法 Ad ...
- View的setTag()与getTag()方法使用
通常我们是用findViewById()方法来取得我们要使用的View控件,不过除了这一种方法之处 ,我们还可以用View中的setTag(Onbect)给View添加一个格外的数据,再用getTag ...
- android:View的setTag和getTag使用
1.用于区分非常多类似的View 比如: button1.setOnClickListener(new OnClickListener ... ); button2.setOnClickListene ...
- View的setTag和getTag使用
在listview 优化其中,会使用到setTag()以及getTag()方法 代码例如以下: @Override public View getView(int position, View con ...
- android:View的setTag和getTag
Adapter 有个getView方法,可以使用setTag把查找的view缓存起来方便多次重用 public View getView(int position, View convertView, ...
- view的setTag() 和 getTag()应用 ViewHolder
转自 http://www.cnblogs.com/qingblog/archive/2012/07/03/2575140.html View中的setTag(Onbect)表示给View添加一个格外 ...
- view中的setTag和getTag方法的理解
下面是一段自定义适配器中的getView方法,其中使用了view的一个setTag和getTag方法 View中的setTag(Onbect)表示给View添加一个格外的数据(相当于缓存),以后可以用 ...
- Android setTag()与getTag(),与set多个setTag()
首先我们要知道setTag方法是干什么的,SDK解释为 Tags Unlike IDs, tags are not used to identify views. Tags are essential ...
随机推荐
- Binary Tree Upside Down
Given a binary tree where all the right nodes are either leaf nodes with a sibling (a left node that ...
- python装饰器初探
一.含有一个装饰器 #encoding: utf-8 ############含有一个装饰器######### def outer(func): def inner(*args, **kwargs): ...
- centos6.5 iptables结合ipset批量屏蔽ip
安装ipset yum install ipset #创建ip地址集合 ipset create bansms hash:net 查找访问了“getVerificationCode”并且次数大于10次 ...
- ios The App Life Cycle
先推荐ios 必读文章 App Programming Guide for iOS ,请在苹果官网搜索,并仔细阅读所有内容 State Description Not running The app ...
- ACM/ICPC 之 数论-费马大定理(HNUOJ 13371)
好歹我是数学专业的学生,还是要写写训练的时候遇到的数学问题滴~~ 在ACM集训的时候在各高校OJ上也遇见过挺多的数学问题,例如大数的处理,素数的各种算法,几何问题,函数问题(单调,周期等性质),甚至是 ...
- gtk+2.24.0-glib-2.28.1-staticLib-mingw32-x86-2016-08-10.7z
GTK_PATH=D:/MSYS/opt/gtk+2.24.0-staticLib b1-static.sh --------------------------------------------- ...
- Django~学习计划
20160302 Excel,PDF 处理 GeoDjango学习:GIS编程,百度地图 Javascript 邮件系统 图像处理
- codeforces 425B Sereja and Table (枚举、位图)
输入n*m的01矩阵.以及k. n,m<=100,k<=10 问修改至多k个,使得矩阵内的各连通块(连着的0或1构成连通块)都是矩形,且不含另外的数字(边界为0(1)的矩形内不含1(0)) ...
- nyoj305_表达式求值
表达式求值 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 Dr.Kong设计的机器人卡多掌握了加减法运算以后,最近又学会了一些简单的函数求值,比如,它知道函数min ...
- java实现批量上传(swfupload)
下载 swfupload 文件夹 里面包含handlers.js,swfupload.js,swfupload.swf 三个文件. 我的是和ssh项目整合在一起的.因为struts2的拦截器会拦截所有 ...