Android setTag方法的key问题

android在设计View类时,为了能储存一些辅助信息,设计一个一个setTag/getTag的方法。这让我想起在Winform设计中每个Control同样存在一个Tag。

今天要说的是我最近学习android遇见的setTag的坑。一般情况下我们只需要使用唯一参数的setTag方法。但有时我们需要存储多个数据,所以这个时候我们就需要使用带key的重载。

文档是描述:“ The specified key should be an id declared in the resources of the application to ensure it is unique (see the ID resource type). Keys identified as belonging to the Android framework or not associated with any package will cause an IllegalArgumentExceptionto be thrown.”

这里说明必须保证key的唯一,但是如果我们使用java常量定义key(private static final int TAG_ID = 1;)这样你任然会遇见如下错误:

java.lang.IllegalArgumentException: The key must be an application-specific resource id

正确的解决方案是:

在res/values/strings.xml中定义这个key常量,如下:

    <resources>
        <item type="id" name="tag_first"></item>
        <item type="id" name="tag_second"></item>
    </resources>

使用如下:

    imageView.setTag(R.id.tag_first, "Hello");
    imageView.setTag(R.id.tag_second, "Success");
时间: 2024-12-28 00:20:25

Android setTag方法的key问题的相关文章

关于 Android Dex 方法限制的一些总结

原文地址:http://greenrobot.me/devpost/about-android-dex-method-number-limit/ Android的编译过程 在了解这个问题之前我们先要来看看Android 应用编译的过程: IDE中的资源打包工具 (Android Asset Packaging Tool ,即图中的aapt) 会将应用中的资源文件进行编译,这些资源文件包括 AndroidManifest.xml文件,为Activity定义的 XML 文件等等.在这个编译过程中也会

Android setTag()与getTag(),与set多个setTag()

首先我们要知道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 v

[转] 很好用的Android Utils方法总结(1)

Android常用的工具类 主要介绍总结的Android开发中常用的工具类,大部分同样适用于Java.目前包括HttpUtils.DownloadManagerPro.ShellUtils.PackageUtils.PreferencesUtils.JSONUtils.FileUtils.ResourceUtils.StringUtils.ParcelUtils.RandomUtils.ArrayUtils.ImageUtils.ListUtils.MapUtils.ObjectUtils.Se

申请Android Map 的API Key(v2)的最新申请方式(SHA1密钥)

申请Android Map 的API Key(v2)的最新申请方式(SHA1密钥)具体步骤如下:                                                                     www.169it.com 1.生SHA1密钥(旧版是MD5)eclipse->help->install new software->add(name: keytool;location:http://www.keytool.sourceforge.net

android onSaveInstance方法

为什么需要用到Activity状态保存, 如何用 ? 1)我们希望当前的Activity中的信息不会因为Activity状态的改变,而丢失.比如横竖屏的切换,突然来了个电话. 2) 借助Activity Lifecycle + Preference来完成状态保存:(此处不做详解) 借助onSaveInstanceState & onCreate or onRestoreInstanceState来完成状态保存: onSaveInstanceState方法会在什么时候被执行 onSaveInsta

convertView&amp;setTag方法的一点理解

前言 首先我们要知道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 th

Android onMeasure 方法的测量规范MeasureSpec

一个MeasureSpec封装了父布局传递给子布局的布局要求,每个MeasureSpec代表了一组宽度和高度的要求.一个MeasureSpec由大小和模式组成.它有三种模式:UNSPECIFIED(未指定),父元素不对子元素施加任何束缚,子元素可以得到任意想要的大小:EXACTLY(完全),父元素决定自元素的确切大小,子元素将被限定在给定的边界里而忽略它本身大小:AT_MOST(至多),子元素至多达到指定大小的值. 它常用的三个函数: 1.static int getMode(int measu

android 小方法

小方法 1.获取屏幕分辨率: 1 public class BaseTools { 2 3 public static int getWindowWidth(Context context) { 4 // 获取屏幕分辨率 5 WindowManager wm = (WindowManager) (context 6 .getSystemService(Context.WINDOW_SERVICE)); 7 DisplayMetrics dm = new DisplayMetrics(); 8 w

Android onTouchEvent方法

Android中监听触摸事件是onTouchEvent方法,它的参数为MotionEvent,下面列举MotionEvent的一些常用的方法: getPointerCount() 获得触屏的点数. getX() 获得触屏的X坐标值 getY() 获得触屏的Y坐标值 getAction() 获得触屏的动作 ACTION_DOWN:按下的动作开始,比如用手指按屏幕. ACTION_UP:按下的动作完成,比如手指停止按屏幕,离开屏幕. ACTION_MOVE:在动作开始和完成之间的移动,比如手指在屏幕