`

Android setTag方法的key问题

阅读更多
转自http://www.cnblogs.com/whitewolf/p/3999773.html

ndroid在设计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");
分享到:
评论

相关推荐

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

    当使用带有key的`setTag`方法时,Android框架要求key必须是应用特有的资源ID,以确保其在整个应用中的唯一性。 问题在于,如果尝试使用Java常量(如`private static final int TAG_ID = 1;`)作为key,系统会抛出`...

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

    在Android开发中,`setTag()` 是一个非常实用的方法,它允许开发者在 `View` 对象中存储自定义的数据,这对于优化性能和传递参数有着重要的作用。本文将深入探讨 `setTag()` 的使用方法,以及如何解决 "The key must...

    Android 将json数据的key和value动态加载到listview

    你需要创建一个自定义的Adapter,继承自`BaseAdapter`或`ArrayAdapter`,并重写`getView()`方法,以便根据key和value来构建每个列表项。 ```java public class MyAdapter extends ArrayAdapter&lt;String&gt; { private ...

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

    在Android开发中,`setTag()` 和 `getTag()` 方法是View类中非常实用的工具,它们允许开发者在不创建额外对象的情况下存储和检索数据。这些方法尤其在处理视图复用,比如在ListView或RecyclerView中,对于节省内存和...

    android okgo的简单使用

    .setTag(this) // 可选 .execute(new StringCallback() { // 回调处理同GET请求 }); ``` 5. **下载文件** 使用`OkGo.download()`方法发起文件下载请求: ```java String url = ...

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

    tag是view的一个属性,也可以说是view用于存放参数的一个map,对于提高性能和参数传递都有妙用,比如提高listview的性能: 用于缓存item的view 代码如下:public View getView(final int position, View convertView...

    Android操作sqlite数据库之Grid显示图片

    在Android开发中,SQLite是一个非常...记住,始终确保在用户交互过程中处理好线程安全问题,避免在主线程中执行耗时操作。在使用任何外部资源(如压缩包中的数据库)时,一定要确保其安全性和合法性,遵循最佳实践。

    为图片添加标签

    2. **使用Integer Tag**:如果你需要存储整数值,可以使用`setTag(int key, Object tag)`方法,其中key通常用于区分不同类型的tag: ```java imageView.setTag(R.id.image_tag, "标签内容"); ``` 3. **自定义类...

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

    ps 该选项可能会导致滑动卡顿自定义信息自定义信息用于android开发者调试使用,开发者可以为view设置setTag(com.wanjian.sak.CanvasManager.INFO_KEY,Object),设置后并开启自定义信息选项后就可以在控件左上角看到...

    Android开发笔记之Adapter用法

    new String[]{"key1", "key2"}, // 数据映射的键 new int[]{R.id.text1, R.id.text2} // 对应的视图ID ); listView.setAdapter(adapter); ``` 在这里,我们创建了一个HashMap列表,每个HashMap对应列表中的一行,...

    Android-ShiDianHttp基于Volley的框架浓郁的iOS风格

    .setTag("myRequestTag") .addParam("key", "value") .enqueue(callback); ``` 2. **异步处理**:借鉴iOS的异步编程模式,ShiDianHttp支持在后台线程处理网络请求,避免阻塞主线程,提高用户体验。通过`enqueue...

    android百度地图地图移动选址并把周边信息用列表显示

    // 构造方法、getItem、getItemId、getCount等方法... @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder; if (convertView == null) { viewHolder...

    Android源码设计模式解析与实战》

    protected int sizeOf(String key, Bitmap bitmap) { return bitmap.getRowBytes() * bitmap.getHeight() / 1024; } }; } public void displayImage(final String url, final ImageView imageView) { ...

    Android volley多图上传

    在Android开发中,图片上传是一项常见的任务,尤其是在社交应用或者电商平台等场景下。Volley是Google推出的...在实际项目中,确保充分测试各种情况,包括网络状况不佳、文件过大等问题,以提供稳定、高效的用户体验。

    Android小米推送简单使用方法

    public void setTag(String tag) { // ignore } @Override public void log(String content, Throwable t) { Log.d(TAG, content, t); } @Override public void log(String content) { Log.d(TAG, ...

    Android中ListView,SQLite,BaseAdapter的结合

    convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } User user = userList.get(position); viewHolder.userName.setText(user.getName()); viewHolder.userAge....

    android读取sqlite数据库的数据并用listview显示

    String CREATE_TABLE = "CREATE TABLE IF NOT EXISTS my_table (id INTEGER PRIMARY KEY, name TEXT)"; db.execSQL(CREATE_TABLE); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, ...

    长春工程学院-Android移动互联网期末考试编程题

    db.execSQL("CREATE TABLE person (id INTEGER PRIMARY KEY, name TEXT)"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // 升级表结构 db.execSQL("DROP ...

Global site tag (gtag.js) - Google Analytics