`

view的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

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); 
}


这样呢就实例话一个listener,同时通过tag传值就不是每一个实例都做了
分享到:
评论

相关推荐

    android setTag()和getTag()的使用

    在实际应用中,`setTag()` 和 `getTag()` 常常被用于以下场景: 1. **数据绑定**:当视图需要显示与之相关的数据时,可以将数据设为Tag,然后在适当时机通过 `getTag()` 获取并使用。 2. **缓存计算结果**:对于...

    Android代码-一个封装的SuperAdapter

    You won't need to write ViewHolder, createView, setTag, getTag, and confuse how to setOnItemClickListener to RecyclerView, etc. The only thing you really need to do is that implement a method onBind...

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

    android在设计View类时,为了能储存一些辅助信息,设计一个一个setTag/getTag的方法。这让我想起在Winform设计中每个Control同样存在一个Tag。 今天要说的是我最近学习android遇见的setTag的坑。一般情况下我们只...

    android中使用tag的例子2

    首先,`Tag`的基本用法是在创建或者获取View时通过`setTag()`和`getTag()`方法进行设置和读取。例如,你可能在一个ListView中,为每个列表项设置一个唯一的`Tag`,这样在点击事件处理中,可以通过`getTag()`快速获取...

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

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

    SRV1.2项目,参考View的渲染

    此外,`setTag()`和`getTag()`方法可以用来存储和检索附加数据,这对于实现特定功能或者区分不同的View实例非常有用。 在SRV1.2项目中,可能还涉及到了自定义View的开发。自定义View通常需要重写`onDraw()`方法,...

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

    总结来说,`setTag()` 和 `getTag()` 提供了一种轻量级的数据存储机制,尤其是在处理视图复用和数据传递时,它们能够显著提升应用的性能和代码的可读性。在实际编程中,开发者需要根据需求选择合适的`key`,确保数据...

    listview的头部尾部布局

    如果需要更新头部或尾部,需要手动调用其setTag和getTag方法,或者重新添加头部和尾部。 通过以上步骤,我们就成功地在ListView中添加了头部和尾部布局。这种方式不仅使ListView功能更加丰富,也能让应用的界面设计...

    ListView保持在列表的顶部固定View 案例分析 源码.zip

    在某些应用场景中,我们可能希望在用户滚动列表时,某些特定的View始终保持在列表的顶部,比如在新闻应用中,当用户滚动时,天气预报或者广告栏总是固定在顶部。这种效果可以通过自定义Adapter和Header来实现,我们...

    Android中ListView适配器中的view重用和接口回调

    `convertView.setTag()`和`convertView.getTag()`用于存储和恢复ViewHolder对象。 接下来,我们谈谈接口回调。在ListView中,我们经常需要在用户与列表项交互时执行某些操作,如点击事件。这时,我们可以定义一个...

    Android ListView 点击单选State

    接下来,我们可以在Adapter中利用View的`setTag()`和`getTag()`方法来存储和检索每个条目的选中状态。`setTag()`可以将任何对象绑定到View,而`getTag()`则用来获取之前设置的对象。例如,我们可以在`getView()`方法...

    自定义view对话框

    在Android开发中,自定义`View`对话框是一种常见的需求,尤其当系统默认的`AlertDialog`无法满足我们对界面布局和交互的个性化要求时。本文将深入探讨如何创建一个自定义`View`对话框,以及如何实现不同类型的列表项...

    list view android

    在Android开发中,ListView是一种非常...然而,ListView仍然是许多现有应用的核心组件,理解它的运作机制和优化技巧对Android开发者来说仍然至关重要。在实际项目中,开发者可以根据需求选择ListView或者RecyclerView。

    Android高级应用源码-WIN8系统 磁贴点击下沉倾斜效果源码.rar

    可以使用`setTag`和`getTag`方法来存储和检索状态信息,或者创建不同的`Drawable`资源来表示不同状态的背景。 6. 倾斜效果: - 倾斜效果通常通过改变View的`rotationX`和`rotationY`属性实现。结合`translationZ`...

    ListView显示出应用列表

    viewHolder = (ViewHolder) convertView.getTag(); } // 获取当前项的数据 ApplicationInfo app = getItem(position); viewHolder.appLabel.setText(app.loadLabel(getPackageManager())); viewHolder.app...

    listview中的单选按钮多选按钮

    在Android开发中,ListView是一种常用的组件,用于展示可滚动的列表数据。...提供的源码实例应包括具体的Adapter实现、ListView布局以及可能的对话框/PopWindow布局,帮助开发者更好地理解和应用这些概念。

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

    在Android平台上,获取手机上所有已安装应用以及能够打开它们是一项常见的需求,这通常涉及到...这个Demo可以作为理解Android系统和开发的起点,进一步深入,还可以扩展为包含过滤特定类型的应用、排序应用列表等功能。

    Android应用源码之自定义组件实现可滑动的ToggleButton的功能.zip

    可以使用setTag()和getTag()方法存储数据,或者实现`Parcelable`接口进行序列化操作。 5. **动画效果**: Android提供了多种动画实现方式,如属性动画(Property Animation)、补间动画(Tween Animation)和帧动画...

    android的tag代码实现

    在Android开发中,"tag"是一个非常重要的概念,它用于标识和组织应用程序中的对象,比如View、Activity或者Intent。Tag可以附加在各种组件上,帮助开发者在代码中追踪和管理这些组件,尤其在调试和日志记录时非常...

Global site tag (gtag.js) - Google Analytics