前言

在做ListView+Adapter时,为了重复利用convertView,如下

if (null != convertView) {
    viewHolder = (ViewHolder) convertView.getTag(TAG_VIEW_MEDIA);
} else {
    viewHolder = new ViewHolder();
    //略
    convertView.setTag(TAG_VIEW_MEDIA, viewHolder);
}

如果存在多个Tag时,通过key进行setTag和getTag,如果tag_view_media不是唯一就会如下异常。

UncaughtException detected: java.lang.IllegalArgumentException: The key must be an application-specific resource id.
        at android.view.View.setTag(View.java:24464)

正文

原因

虽然TAG_VIEW_MEDIA是final的常量,当并不是唯一的,而且Android要求:The key must be an application-specific resource id

解决方式

在values中创建一个ids.xml

values/ids.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <item name="tag_view_media" type="id" />
</resources>

TAG_VIEW_MEDIA替换为R.id.tag_view_media 即可。

参考文章

  1. 【Bug】The key must be an application-specific resource id.

相关文章

暂无评论

none
暂无评论...