android 设置多个tag,Android setTag()与getTag()

首先我们要知道setTag方法是干什么的,SDK解释为

Tags

Unlike IDs, tags are not used to identify views. Tags are essentially an extra piece of information that can be associated with a view. They are most often used as a convenience to store data related to views in the views themselves rather than by putting them in a separate structure.

Tag不像ID是用标示view的。Tag从本质上来讲是就是相关联的view的额外的信息。它们经常用来存储一些view的数据,这样做非常方便而不用存入另外的单独结构。

Tag有一个特点,绑定数据到指定控件(view),而不显示出来。setTag是android的view类中很有用的一个方法,与setId()不同,findViewById找到的是对象本身。而setTag()取出来的是对象所指向的对象。

在同一个类中,存取数据很方便,不用数据库建库,也比sharePreference更节约内存。setTag(Object tag)方法比较简单。比如

 
 

TextView tvExecutor = (TextView)findViewById(R.id.t);

tvExecutor.setTag(selectedUserMap);

这个selectedUserMap 可以是Map selectedUserMap这个对象。也可以是LinkedList mList 这个对象。可以存储各种临时数据,但是还不能称其为存储方式。在开发中,我们可以使用setTag(),getTag(),存取数据。可不可以一个对象,设置多个Tag呢?答案是肯定的。

一、利用缓存convertView尽可能少实例化同样结构体的对象

 
 

public View getView(int position, View convertView, ViewGroup parent) {

ViewHolder holder = null;

if (convertView == null) {

holder = new ViewHolder();

convertView = inflater.inflate(R.layout.vlist2, null);

holder.img = (ImageView) convertView.findViewById(R.id.img);

holder.title = (TextView) convertView.findViewById(R.id.title);

holder.info = (TextView)convertView.findViewById(R.id.info);

// setTag的妙用

convertView.setTag(holder);

} else {

holder = (ViewHolder) convertView.getTag();

}

……略

}

二、onClick点击事件中设置多个TAG

可以用在多个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;

}

}

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Tag的使用 package com.yarin.android.qiehuan; import android.app.AlertDialog; import android.app.Dialog; import android.app.TabActivity; import android.content.DialogInterface; import android.graphics.Color; import android.os.Bundle; import android.widget.TabHost; import android.widget.TabHost.OnTabChangeListener; public class Activity01 extends TabActivity { //声明TabHost对象 TabHost mTabHost; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //取得TabHost对象 mTabHost = getTabHost(); /* 为TabHost添加标签 */ //新建一个newTabSpec(newTabSpec) //设置其标签和图标(setIndicator) //设置内容(setContent) mTabHost.addTab(mTabHost.newTabSpec("test1") .setIndicator("TAB 1",getResources().getDrawable(R.drawable.img1)) .setContent(R.id.textview1)); mTabHost.addTab(mTabHost.newTabSpec("test2") .setIndicator("TAB 2",getResources().getDrawable(R.drawable.img2)) .setContent(R.id.textview2)); mTabHost.addTab(mTabHost.newTabSpec("test3") .setIndicator("TAB 3",getResources().getDrawable(R.drawable.img3)) .setContent(R.id.textview3)); //设置TabHost的背景颜色 mTabHost.setBackgroundColor(Color.argb(150, 22, 70, 150)); //设置TabHost的背景图片资源 //mTabHost.setBackgroundResource(R.drawable.bg0); //设置当前显示哪一个标签 mTabHost.setCurrentTab(0); //标签切换事件处理,setOnTabChangedListener mTabHost.setOnTabChangedListener(new OnTabChangeListener() { // TODO Auto-generated method stub @Override public void onTabChanged(String tabId) { Dialog dialog = new AlertDialog.Builder(Activity01.this) .setTitle("善谢谢提醒") .setMessage("现在选中了:"+tabId+"标签") .setPositiveButton("确定", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { dialog.cancel(); } }).create();//创建按钮 dialog.show(); } }); } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值