`
globaldev
  • 浏览: 34648 次
  • 性别: 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()的使用 博客:http://blog.csdn.net/yelangjueqi/article/details/9666037

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

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

    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代码-LogCollector:一个收集 app 输出日志的工具

    一个收集 app 输出日志的工具,输出文件:模拟器是 /sdcard/Android/data/项目包名/cache/,真机是 /Android/data/项目包名/cache/,里面的 crash 目录是崩溃日志,log 目录是 logcat 日志。 如何使用 在 module ...

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

    主要介绍了Android 同时setTag两次保存多种值的示例代码,需要的朋友可以参考下

    android地址选择器

    //android.util.Log.i("", String.format("[pos=%d]",position)); int index = (Integer)parent.getTag(); //ArrayAdapter&lt;String&gt; obj = (ArrayAdapter)(parent.getAdapter()); //String value = obj.getItem...

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

    本文主要介绍Android开发setTag的妙用,小编觉得挺实用的,给大家一个参考,希望对大家学习有所帮助。

    TreeRecyclerView

    2.ItemManager新增了setTag.getTag方法,可以通过该方法绑定Activity或者Fragment等对象.在TreeItem可以获取该对象 3.TreeItem新增了init方法,可以做一些初始化设置,比如默认是否展开等等 4.新增了getItemOffsets的...

    spotify-streamer

    对于ArtistAdapter和PlaylistAdapter使用setTag和getTag ###一般协助 Udacity的“开发Android应用”课程 Android开发人员指南 向上按钮修复 网络可用检查 ###包含的第三方模块 适用于Android的Piacasso 适用于...

    SwipeListViewTest项目

    &lt;RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:swipe="http://schemas.android.com/apk/res-auto" android:layout_width=...

    Android代码-AndroidUtilsset安卓工具类集合

    AndroidUtils Android Utils set 一个比较全面的安卓工具类集合 HOW TO USE Gradle compile 'com.superkung:AndroidUtils:1.0.0' ... AndroidUtils.setTAG("log"); In Java AndroidUtils.log.d("log")

    android中使用AsyncTask实现下载、暂停,暂存下载进度

    btn_start.setTag(String.valueOf(position)); btn_pause.setTag(String.valueOf(position)); btn_stop.setTag(String.valueOf(position)); btn_continue.setTag(String.valueOf(position)); pb_progressBar....

    通用Android工具库Common4Android.zip

    Common4Android是一个通用Android工具库,包含网络库、线程管理器、常用Util工具、热修复,它拥有良好的架构,低耦合、高内聚,使用起来非常轻松。 -基类 ClassName Description ...

    android中使用AsyncTask实现下载、停止、暂停、继续

    btn_start.setTag(String.valueOf(position)); btn_pause.setTag(String.valueOf(position)); btn_stop.setTag(String.valueOf(position)); btn_continue.setTag(String.valueOf(position)); pb_...

    ZhaoLizz#Android-Notes#RecyclerView的回调点击事件1

    RecyclerView点击事件的回调机制当需要用到点击事件发送intent时,必须用回调可以利用 控件.setTag(),view.getTag(),利用vi

    SelectAll全选

    删除之类操作需要全选... convertView.setTag(holder); } else { // 取出holder holder = (ViewHolder) convertView.getTag(); } // 设置list中TextView的显示 holder.tv.setText(list.get(position)); ...

    SwissArmyKnife-android免root兼容所有版本ui调试工具.zip

    SwissArmyKnife是什么SwissArmyKnife 是一款方便调试android UI的工具,可以兼容所有android版本,不需要root权限。可以直接在android手机屏幕上显示当前Activity中所有控件(不管是否隐藏)的边界,内外边距大小,...

    listviewAdapter

    viewHolder = (ViewHolder) convertView.getTag(); } viewHolder.title.setText(list.get(position).getTitle()); viewHolder.publish.setText(list.get(position).getPubblish()); viewHolder.brief.setText...

Global site tag (gtag.js) - Google Analytics