android中如何正确的设置view的多个tag值

在android开发过程中,我们经常会用到view.setTag(object)这个方法,特别是在ListView的自定义的adapter中复用view的时候。同时,view还提供了设置多个tag数据的方法,即view.setTag(int,Object),其中这个int值需要设置正确,不然这个方法会报错了。让我们来看看怎么设置这个值。先看结果:

从eclipse打印的log可以看出,我设置了gridview的4种不同类型的tag值。再来看看代码。

package com.androidtest.scroll;

import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.Button;
import android.widget.GridView;
import android.widget.TextView;

import com.androidtest.R;
import com.androidtest.base.BaseActivity;

public class GridViewActivity extends BaseActivity implements OnClickListener{

    private TextView title;
    private GridView gridView;
    private Button btn_setTag,btn_getTag;

    private final static int five=5<<24;
    private final static int six=6<<24;
    private final static int serven=7<<24;
    private final static int eight=8<<24;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_gridview);

        init();

    }

    private void init() {
        title=(TextView) findViewById(R.id.title);
        title.setText("test gridview");

        findViewById(R.id.back).setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                finish();
            }
        });

        rootView=findViewById(R.id.rootView);

        btn_getTag=(Button) findViewById(R.id.btn_getTag);
        btn_setTag=(Button) findViewById(R.id.btn_setTag);
        btn_setTag.setOnClickListener(this);
        btn_getTag.setOnClickListener(this);

        gridView=(GridView) findViewById(R.id.gridView);
        gridView.setAdapter(createAdapter());
    }

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        if(v==btn_getTag) {
            getTag();
        }else if(v==btn_setTag) {
            setTag();
        }
    }

    private void setTag() {
        gridView.setTag(five,"hello world");
        gridView.setTag(six,true);
        gridView.setTag(serven,100);
        gridView.setTag(eight,158.9f);
    }

    private void getTag() {
        Log.e("gridview getTag(index)",
        "String:"+((String)gridView.getTag(five)));
        Log.e("gridview getTag(index)", "boolean:"+
        ((Boolean)gridView.getTag(six)));
        Log.e("gridview getTag(index)", "int:"+
        ((Integer)gridView.getTag(serven)));
        Log.e("gridview getTag(index)", "float:"+
        ((Float)gridView.getTag(eight)));
    }
}

运行界面:

view.setTag(int,Object)中的int值必须要左移24位才行,这样才不会报错。

时间: 2024-10-13 13:03:50

android中如何正确的设置view的多个tag值的相关文章

Android中的进程和线程,-&gt;View.post(Runnable) -&gt;AsyncTask

写在前面的话 一个Android应用就是一个Linux进程,每个应用在各自的进程中运行,互不干扰,比较安全. 一个应用对应一个主线程,就是通常所说的UI线程,android遵守的就是单线程模型,所以说Ui操作不是线程安全的并且这些操作必须在UI线程中执行. 本文是对官方文档的翻译,原文链接:https://developer.android.com/guide/components/processes-and-threads.html 概述 当某个应用组件启动且该应用没有运行其他任何组件时,An

Android中通过反射来设置显示时间

这个Toast的显示在Android中的用途还是很大的,同时我们也知道toast显示的时间是不可控的,我们只能修改他的显示样式和显示的位置,虽然他提供了一个显示时间的设置方法,但是那是没有效果的(后面会说到),他有两个静态的常量Toast.SHORT和Toast.LONG,这个在后面我会在源码中看到这个两个时间其实是2.5s和3s.那么我们如果真想控制toast的显示时间该怎么办呢?真的是无计可施了吗?天无绝人之路,而且Linux之父曾经说过:遇到问题就去看那个操蛋的源代码吧!!下面就从源代码开

如何在Android中为TextView动态设置drawableLeft等

如何在Android中为TextView动态设置drawableLeft等 两种方式: 方式1:手动设置固有边界 1 Drawable drawable = getResources().getDrawable(resId); 2 //注意查看方法TextView.setCompoundDrawables(Drawable, Drawable, Drawable, Drawable) 3 //的注释,要求设置的drawable必须已经通过Drawable.setBounds方法设置过边界参数 4

【原创】如何在Android中为TextView动态设置drawableLeft等

如何在Android中为TextView动态设置drawableLeft等 两种方式: 方式1:手动设置固有边界 1 Drawable drawable = getResources().getDrawable(resId); 2 //注意查看方法TextView.setCompoundDrawables(Drawable, Drawable, Drawable, Drawable) 3 //的注释,要求设置的drawable必须已经通过Drawable.setBounds方法设置过边界参数 4

Android进阶笔记08:Android 中Activity、Window和View之间的关系

1. Android 中Activity.Window和View之间的关系(比喻): Activity像一个工匠(控制单元),Window像窗户(承载模型),View像窗花(显示视图) LayoutInflater像剪刀,Xml配置像窗花图纸.  2. 详解:       Activity是Android应用程序的载体,允许用户在其上创建一个用户界面,并提供用户处理事件的API,如onKeyEvent, onTouchEvent等. 并维护应用程序的生命周期.Activity本身是个庞大的载体,

android中ColorStateList及StateListDrawable设置Selector

写过android的代码相信大家对Selector并不陌生吧,下面来看看这段xml文件是如何定义的 <?xml version="1.0" encoding="utf-8" ?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 触摸时并且当前窗口处于交互状态 --> <item android:state

Android中实现Bitmap在自定义View中的放大与拖动

一:基本实现思路 基于View类实现自定义View –MyImageView类.在使用View的Activity类中完成OnTouchListener接口,实现对自定义View的触摸事件监听 放大与拖动 基于单点触控实现Bitmap对象在View上的拖动.并且检测View的边缘,防止拖动过界.基于两个点触控实现Bitmap对象在View上的放大.并且检测放大倍数.基于Matrix对象实现对Bitmap在View上放大与平移变换 Bitmap对象在View中的更新与显示 通过重载onDraw方法,

Android中通过反射来设置Toast的显示时间

这个Toast的显示在Android中的用途还是非常大的,同一时候我们也知道toast显示的时间是不可控的.我们仅仅能改动他的显示样式和显示的位置,尽管他提供了一个显示时间的设置方法.可是那是没有效果的(后面会说到).他有两个静态的常量Toast.SHORT和Toast.LONG,这个在后面我会在源码中看到这个两个时间事实上是2.5s和3s. 那么我们假设真想控制toast的显示时间该怎么办呢?真的是无计可施了吗?天无绝人之路,并且Linux之父以前说过:遇到问题就去看那个操蛋的源码吧.!以下就

Android中字体颜色的设置

1.在Android中经常看到设置的颜色为八位的十六进制的颜色值,例如: 1 2 3 public static final class color {     public static final int lightblue=0x7f040000; } 或者在Java中tx.setTextColor(0xffff00f); 说明: 0xffff00ff是int类型的数据,分组一下0x|ff|ff00ff,0x表示颜色整数的标记,ff表示透明度,f00f表示色值,注意:0x后面ffff00ff