`
globaldev
  • 浏览: 35278 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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 {    
       
    @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


}

你可以看看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 = <span style="background-color: #eeeeee; font-family: Lucida Console;">(Integer)</span> 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传值就不是每一个实例都做了
分享到:
评论

相关推荐

    android setTag()和getTag()的使用

    在Android开发中,`setTag()` 和 `getTag()` 是两个非常重要的方法,它们主要用于对象的标记和数据存储。这两个方法存在于View类中,因此几乎所有的Android视图组件(如Button、TextView、ImageView等)都可以使用。...

    Android setTag方法的key问题解决办法

    在Android开发中,`setTag`方法是一个非常实用的功能,它允许开发者为View对象附加额外的信息,这些信息可以在稍后通过`getTag`方法获取。然而,当涉及到使用键值对(key-value pair)来存储多个数据时,可能会遇到...

    Android 获取手机所有已安装的应用,并可以打开它

    在Android平台上,获取手机上所有已安装应用以及能够打开它们是一项常见的需求,这通常涉及到系统权限的申请、应用信息的查询以及Intent的使用。本文将详细介绍如何实现这一功能。 首先,我们需要在AndroidManifest...

    Android 同时setTag两次保存多种值的示例代码

    在Android开发中,`setTag()` 和 `getTag()` 方法是View类中非常实用的工具,它们允许开发者在不创建额外对象的情况下存储和检索数据。这些方法尤其在处理视图复用,比如在ListView或RecyclerView中,对于节省内存和...

    Android应用源码之IncludeDemo.zip

    你可以通过`View.setTag()`和`View.getTag()`在包含的布局中设置和获取数据,或者使用`LayoutInflater.Factory2`接口动态替换`&lt;merge&gt;`标签内的视图。 ### 5. `&lt;merge&gt;`标签的使用 为了优化性能和减少视图层次,...

    Android 5.0 CardView+ListView 卡片布局应用

    在本主题中,我们将深入探讨如何在Android应用中使用CardView结合ListView来创建卡片布局。 首先,让我们了解CardView的基本用法。在XML布局文件中,你可以通过添加`&lt;android.support.v7.widget.CardView&gt;`标签来...

    Android ListView 选中效果 自定义

    viewHolder = (ViewHolder) convertView.getTag(); } // 设置数据 viewHolder.textView.setText(items.get(position)); return convertView; } // ViewHolder类... } ``` 在实际应用中,可能还需要处理...

    android ListView简单用法

    在Android开发中,ListView是一个非常重要的组件...在实际应用中,你可能还需要根据需求进行更复杂的定制,如使用Header和Footer、处理空列表情况、优化滚动性能等。继续学习和实践,将使你对ListView有更深入的理解。

    Android应用源码之双列关联listview.zip

    下面我们将深入探讨这个主题,了解如何在Android应用中实现这样的功能。 首先,我们需要理解ListView的工作原理。ListView通过Adapter来填充数据,Adapter是连接数据源与视图的桥梁。对于双列关联的ListView,我们...

    android 九宫格模式实现多个activity的切换

    在Android应用开发中,"九宫格模式"是一种常见的用户界面设计,通常用于展示一系列功能或选项。这种设计使得用户可以方便地通过点击九个图标中的任一个来启动不同的Activity,实现不同功能间的快速切换。在本文中,...

    Android标签的显示

    在代码中,可以通过`View.getTag()`和`View.setTag()`方法来获取和设置标签。例如: ```java Button myButton = findViewById(R.id.my_button); String tag = (String) myButton.getTag(); // 获取标签 ...

    Android 如何在一个Activity中显示多种类型的checkBox.zip

    在Android开发中,CheckBox是一种常用的UI元素,它允许用户进行多选操作。在同一个Activity中显示多种类型的CheckBox,可以...通过灵活地调整样式和事件处理,可以轻松地实现各种类型的CheckBox,提升应用的用户体验。

    Android开发 -- setTag的妙用和The key must be an application-specific resource id 异常

    在Android开发中,`setTag()` 是一个非常实用的方法,它允许开发者在 `View` 对象中存储自定义的数据,这对于优化性能和传递参数有着重要的作用。本文将深入探讨 `setTag()` 的使用方法,以及如何解决 "The key must...

    Android应用源码之expandableList-IT计算机-毕业设计.zip

    在适配器中,你需要将数据模型与视图进行关联,例如通过setTag()和getTag()方法在视图和数据之间建立关系。同时,你可能还需要实现点击事件监听,这通常在getChildView()或getGroupView()中设置,通过设置...

    自制Android列表Listview

    viewHolder = (ViewHolder) convertView.getTag(); } ItemData itemData = dataList.get(position); viewHolder.imageView.setImageResource(itemData.getImageRes()); viewHolder.textView.setText(itemData....

    Android ListView长按弹出CheckBox批量删除功能

    本教程将详细讲解如何在Android中实现这个功能,以模仿某些流行的播放器应用。 首先,我们需要创建一个ListView,这可以通过XML布局文件完成。在布局文件中,为每个ListView项定义一个自定义的View,该View包含一个...

    控件标签android,类似电影图片上班的推荐标签

    在Android的View类中,每个视图都有一个`setTag()`和`getTag()`方法,用于设置和获取该视图的标签对象。这些标签通常是任意类型的对象,可以是字符串、整数或者其他自定义的数据类型。开发者通常利用这个特性为视图...

    Android高级用户界面编程技巧

    在Android应用开发中,用户界面的设计与实现至关重要,良好的用户体验往往能显著提升应用的吸引力。本文档将深入探讨Android界面编程的一些高级技巧,特别是关于ListView及其适配器(Adapter)的高效使用方法。通过...

    android 的listview 内部item的布局包含checkbox控件

    在Android开发中,ListView是一种非常常见的视图组件,它用于展示大量的数据列表,通常用于创建具有滚动功能的应用界面。在ListView中,我们有时需要在每个Item(列表项)内加入可选的元素,如Checkbox,以实现多选...

Global site tag (gtag.js) - Google Analytics