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 ...
随机推荐
- Intel项目所用jquery小知识点总结
1.$("#tdGeo input[type='checkbox']:checked") ---筛选出所有已经Check的Checkbox 2.$("#tdCount ...
- 为什么学习c++?该怎么学?
本人最近刚开始学习C++,准备记录下学习C++的历程.以下都是记录欢迎指教. 第一堂课,我们的老师告诉我们为什么学习C++,学习C++有啥用?这我也想了.但是我不了解C++,所以肯定是想不了多少的. ...
- (转)C++0x语言新特性一览
转自:http://blog.csdn.net/zwvista/article/details/2429781 原文请见http://en.wikipedia.org/wiki/C%2B%2B0x. ...
- Qt 子窗体嵌入父窗体
1.创建个子窗体QDialog.在子窗体构造函数添加 Dialog::Dialog(QWidget *parent) : QDialog(parent), ui(new Ui::Dialog) { u ...
- ExpressQuantumGrid4的cxGrid的一些使用方法和经验
使用cxGrid有一些时间了,在这里总结一下使用cxGrid的一些方法,希望给刚开始接触cxGrid的人一些帮助. 1.简单介绍:cxGrid右下方的cxGrid1Level1是表示Grid表的层,c ...
- springMVC中ajax的使用
springMVC中使用ajax有两种方法,第一种是根据servletAPI来使用ajax,第二种是根据springMVC给我们提供的API来使用. 一.根据servletAPI: springMVC ...
- Effective C++ -----条款11: 在operator=中处理“自我赋值”
确保当对象自我赋值时operator=有良好行为.其中技术包括比较“来源 对象”和“目标对象”的地址.精心周到的语句顺序.以及copy-and-swap. 确定任何函数如果操作一个以上的对象,而其中多 ...
- 【leetcode】Search for a Range(middle)
Given a sorted array of integers, find the starting and ending position of a given target value. You ...
- 查看Linux内核
方法一: 命令: uname -a 作用: 查看系统内核版本号及系统名称 方法二: 命令: cat /proc/version 作用: 查看目录"/proc"下version的信息 ...
- August 18th 2016 Week 34th Thursday
Comedy is acting out optimism. 喜剧就是将乐观演绎出来. Being optimistic or pessimistic, that is all about your ...