Android之:View的setTag()与getTag()方法使用

通常我们是用findViewById()方法来取得我们要使用的View控件,不过除了这一种方法之处 ,我们还可以用View中的setTag(Onbect)给View添加一个格外的数据,再用getTag()获取到对应的View。setTag()和getTag()方法常用在处理多个相同的View时,比如我们有要对几个Button添加点击事件,我们除了可以用view.getId()来区分Button,也可以给Button设置Tag来进行区分。如:

public class TagTestActivity extends Activity implements OnClickListener {

private Button tagBtn2,tagBtn3,tagBtn4;

@Override

protected void onCreate(Bundle savedInstanceState) {

// TODO Auto-generated method stub

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

initViews();

dealBtnsListeners();

}

private void initViews() {

tagBtn2=(Button) findViewById(R.id.tag_btn_2);

tagBtn3=(Button) findViewById(R.id.tag_btn_3);

tagBtn4=(Button) findViewById(R.id.tag_btn_4);

}

private void dealBtnsListeners() {

tagBtn2.setOnClickListener(this);

tagBtn3.setOnClickListener(this);

tagBtn4.setOnClickListener(this);

tagBtn2.setTag(2);

tagBtn3.setTag(3);

tagBtn4.setTag(4);

}

@Override

public void onClick(View v) {

//一般我们根据控件的id来判断是哪个Button被点击,这里我们用getTag()来判断

int btnId=(int) v.getTag();

switch (btnId) {

case 2:

Toast.makeText(this, "点击Tag为2的Button", 3000).show();

break;

case 3:

Toast.makeText(this, "点击Tag为3的Button", 3000).show();

break;

case 4:

Toast.makeText(this, "点击Tag为4的Button", 3000).show();

break;

default:

break;

}

}

}

但是Tag最常用的地方并不在上面所讲的。用过ListView的伙伴们对Tag肯定不陌生。为了提高程序性能,我们在给ListView写适配器Adapter的时候,我们就要用到Tag,下面的代码大家肯定有过啦:

static class ViewHolder {

private TextView tagTv01;

private  TextView tagTv02;

}

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

if (convertView == null) {

LayoutInflater inflater = mContext.getLayoutInflater();

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

ViewHolder vh = new ViewHolder();

vh.tagTv01 = (TextView)convertView.findViewById(R.id.tagTv01);

vh.tagTv02 = (TextView)convertView.findViewById(R.id.tagTv01);

convertView.setTag(vh);

}  else{

vh=(ViewHolder) convertView.getTag();

}

//添加数据........

}

除了以上的两种 情况,我们通常不建议用setTag()和getTag(),主要是考虑到代码的可读性,另外就是setTag(Objcet)中传的是Object对象,存在对象转化 问题。

时间: 2024-10-11 08:04:59

Android之:View的setTag()与getTag()方法使用的相关文章

View的setTag和getTag方法

---恢复内容开始--- public View getView(int position, View convertView, ViewGroup parent) { Msg msg =getItem(position); View view; ViewHolder viewHolder; if(convertView==null){ view=LayoutInflater.from(getContext()).inflate(resourceId, null); viewHolder = n

android:View的setTag和getTag使用

1.用于区分很多相似的View 例如: button1.setOnClickListener(new OnClickListener ... ); button2.setOnClickListener(new OnClickListener ... ); 它们可能执行相似的逻辑,但你必须分别为两个Button设置两个独立的OnClick事件, public void onClick(View v) { doAction(1); // 1 for button1, 2 for button2, e

Android中View的setTag与getTag行为理解一例

最近在学Android,看到ListView的Adaptor优化这里遇到一点理解上的困难. 目前流行的优化方法是结合convertView和ViewHolder来优化View的创建和查找,如: public class ViewHolderAdapter extends ArrayAdapter { static class ViewHolder { TextView text1; TextView text2; TextView longtext; } public View getView(

View的setTag和getTag使用

在listview 优化当中,会使用到setTag()以及getTag()方法 代码如下: @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder; if(convertView==null){ viewHolder = new ViewHolder(); convertView = inflater.inflate(R.layout.item,

Android 自定义View需要重写ondraw()等方法

Android  自定义View需要重写ondraw()等方法,这篇博客给大家说说自定义View的写法,需要我们继承View,然后重写一些 方法,方法多多,看你需要什么方法 首先写一个自定义的View 继承View package com.example.engineerjspview; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import and

Android中View的绘制过程 onMeasure方法简述

Android中View的绘制过程 当Activity获得焦点时,它将被要求绘制自己的布局,Android framework将会处理绘制过程,Activity只需提供它的布局的根节点. 绘制过程从布局的根节点开始,从根节点开始测量和绘制整个layout tree. 每一个ViewGroup 负责要求它的每一个孩子被绘制,每一个View负责绘制自己. 因为整个树是按顺序遍历的,所以父节点会先被绘制,而兄弟节点会按照它们在树中出现的顺序被绘制. 绘制是一个两遍(two pass)的过程:一个mea

【转】Android中View的绘制过程 onMeasure方法简述 附有自定义View例子

Android中View的绘制过程 当Activity获得焦点时,它将被要求绘制自己的布局,Android framework将会处理绘制过程,Activity只需提供它的布局的根节点. 绘制过程从布局的根节点开始,从根节点开始测量和绘制整个layout tree. 每一个ViewGroup 负责要求它的每一个孩子被绘制,每一个View负责绘制自己. 因为整个树是按顺序遍历的,所以父节点会先被绘制,而兄弟节点会按照它们在树中出现的顺序被绘制. 绘制是一个两遍(two pass)的过程:一个mea

Android中View的绘制过程 onMeasure方法简述 附有自定义View例子

Android中View的绘制过程 当Activity获得焦点时,它将被要求绘制自己的布局,Android framework将会处理绘制过程,Activity只需提供它的布局的根节点. 绘制过程从布局的根节点开始,从根节点开始测量和绘制整个layout tree. 每一个ViewGroup 负责要求它的每一个孩子被绘制,每一个View负责绘制自己. 因为整个树是按顺序遍历的,所以父节点会先被绘制,而兄弟节点会按照它们在树中出现的顺序被绘制. 绘制是一个两遍(two pass)的过程:一个mea

view的setTag() 和 getTag()应用 ViewHolder

转自 http://www.cnblogs.com/qingblog/archive/2012/07/03/2575140.html View中的setTag(Onbect)表示给View添加一个格外的数据,以后可以用getTag()将这个数据取出来. 可以用在多个Button添加一个监听器,每个Button都设置不同的setTag.这个监听器就通过getTag来分辨是哪个Button 被按下. import android.app.Activity; import android.os.Bun