146 votes

La clé doit être un identifiant de ressource spécifique à l'application

Pourquoi cette exception ?

05-18 20:29:38.044: ERROR/AndroidRuntime(5453): java.lang.IllegalArgumentException: The key must be an application-specific resource id.
05-18 20:29:38.044: ERROR/AndroidRuntime(5453):     at android.view.View.setTag(View.java:7704)
05-18 20:29:38.044: ERROR/AndroidRuntime(5453):     at com.mypkg.viewP.inflateRow(viewP.java:518)

la ligne en question est :

((Button) row.findViewById(R.id.btnPickContact)).setTag(TAG_ONLINE_ID,objContact.onlineid);

et je l'ai défini comme suit :

private static final int TAG_ONLINE_ID = 1;

3voto

ViliusK Points 1257

J'ai utilisé viewHolder.itemTitleTextView.getId() . Mais vous pouvez aussi déclarer dans vos ressources : <item type="id" name="conversation_thread_id"/>

2voto

Jackie Cheng Points 68

Vous pouvez utiliser cette :

private static final int TAG_ONLINE_ID = View.generateViewId() + 2 << 24;

pour l'identifiant de ressource spécifique à l'application uniqness

0voto

yu xiaofei Points 55

Cela fonctionne pour moi :

setTag(0xffffffff,objContact.onlineid);

0voto

Johannes Schuh Points 52

La raison pour laquelle vous voulez enregistrer la valeur par un identifiant est que vous voulez couvrir plus d'une valeur dans cette balise, n'est-ce pas ?
Voici une solution plus simple :
Supposons que vous souhaitiez enregistrer deux valeurs (chaînes) dans cette balise : "prénom" et "nom". Vous pouvez les enregistrer toutes les deux dans une seule chaîne, séparées par un point-virgule :

v.setTag(firstname + ";" + lastname);

... et y accéder en les divisant en un tableau de chaînes de caractères :

String[] data = v.getTag().toString().split(";");
System.out.println(data[0]) //firstname
System.out.println(data[1]) //lastname

0voto

kc ochibili Points 321

Voici une solution simple qui fonctionne pour moi :

int tagKey = "YourSimpleKey".hashCode();

myView.setTag(tagKey, "MyTagObject");

l'indice important ici est d'appeler .hashCode(); sur la chaîne de caractères

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X