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
}

View中的setTag(Object)表示给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; 
} 
} 
} 
}

android: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()应用 (转)

    原文地址:http://www.cnblogs.com/qingblog/archive/2012/07/03/2575140.html View中的setTag(Onbect)表示给View添加一个 ...

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

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

  7. View的setTag和getTag使用

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

  8. [Android] View.setTag(key,Object) (java.lang.IllegalArgumentException: The key must be an application-specific resource id.)

    转自: http://blog.csdn.net/brokge/article/details/8536906 setTag是android的view类中很有用的一个方法,可以用它来给空间附加一些信息 ...

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

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

随机推荐

  1. windows service 的错误 错误 14001:

    1.Windows服务启动时报:“错误 14001:由于应用程序配置不正确,应用程序未能启动.重新安装应用程序可能会纠正这个问题.”的错误. 原因:Windows 服务程序 配置文件中   <a ...

  2. Range:HTML5中的新型Input类型

    <div style="width:100%; height:100%; position:fixed; top:0; left:0; z-index:100000; backgrou ...

  3. bzoj1150 堆应用,好题

    #include<bits/stdc++.h> using namespace std; #define maxn 100005 #define INF 0x3fffffff #defin ...

  4. cf 1082abc

    还是菜,两题dp一题模拟 /* 反正就两个方向,往左或者往右,如果都不行,那就是-1 */ #include<bits/stdc++.h> using namespace std; int ...

  5. PyCharm 新建文件时默认添加作者时间等

    将内容添加到Python Script 右侧的文本框中: 路径: File → Setting → Editor → File and Code Templates → Python Script # ...

  6. 字节、字、bit、byte的关系【转】

    字 word 字节 byte 位 bit 字长是指字的长度 1字=2字节(1 word = 2 byte) 1字节=8位(1 byte = 8bit)  一个字的字长为16 一个字节的字长是8 bps ...

  7. C#获取路径

    System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName -获取模块的完整路径. System.Environment.Cu ...

  8. SpringMVC后台token防重复提交解决方案

    本文介绍如何使用token来防止前端重复提交的问题. 目录 1.思路 2.拦截器源码实现 3.注解源码 4.拦截器的配置 5.使用指南 6.结语 思路 1.添加拦截器,拦截需要防重复提交的请求 2.通 ...

  9. day--16页面布局

        后台页面布局 一.fixed布局 <!DOCTYPE html> <html lang="en"> <head> <meta ch ...

  10. zstu 4247-萌新的旅行

    题目大意: zstu的萌新们准备去自助旅行,他们租了一辆吉普车,然后选择了n个城市作为游览地点.然后他们惊喜的发现他们选择的城市刚好绕城一个环. 也就是说如果给所有城市按照0,1,2,……,n-1编号 ...