Pourquoi ai-je 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:
private static final int TAG_ONLINE_ID = 1;
android
illegalargumentexception
Pentium10
la source
la source
La raison pour laquelle vous ne pouvez pas utiliser setTag (int, Object) est que Android nécessite un identifiant unique pré-compilé dans l'argument 'int'.
Essayez de créer deux entrées uniques dans String.xml xml, dites "firstname" et "secondname" et utilisez-les comme ci-dessous
la source
Je suis un peu en retard à la fête mais je suis tombé sur ce problème moi-même aujourd'hui et j'ai pensé que je donnerais aussi une réponse. Cette réponse sera un peu une compilation des autres réponses, mais avec une torsion. Tout d'abord, l'id, comme cela a été souligné par d'autres, ne peut PAS être une constante définie dans votre code (comme private static final int MYID = 123) ou tout autre int que vous définissez comme un champ quelque part.
L'identifiant doit être un identifiant unique précompilé, tout comme ceux que vous obtenez pour les chaînes que vous mettez dans values / strings.xml (c'est-à-dire R.string.mystring). Référez-vous aux sites http://developer.android.com/guide/topics/resources/available-resources.html et http://developer.android.com/guide/topics/resources/more-resources.html pour plus d'informations.
Ma suggestion est de créer un nouveau fichier appelé values / tags.xml et d'écrire:
Je pense qu'il vaut mieux créer un fichier séparé au lieu de le mettre dans strings.xml comme le suggérait EtienneSky.
la source
<item name="TAG_ONLINE_ID" type="id"/>
simplifier la tâche.R.id...
, et nonR.string..
ouR.tags...
CECI FERA LE TRAVAIL ...
Si vous n'avez qu'un seul setTag dans votre classe, vous pouvez utiliser n'importe quel int, peut-être statique final déclaré en haut.
Le problème survient lorsque vous avez 2 setTag ou plus avec des clés différentes. Je veux dire:
Ce scénario est faux. Vous devez ensuite ajouter un fichier de valeur appelé peut-être ids.xml avec les éléments suivants:
Ensuite, dans votre classe, appelez:
la source
devrait marcher. Plus d'informations de ceph3us :
de la source:
la source
J'ai utilisé
viewHolder.itemTitleTextView.getId()
. Mais vous pouvez également déclarer dans vos ressources:<item type="id" name="conversation_thread_id"/>
la source
Cela fonctionne pour moi:
la source
La raison pour laquelle vous souhaitez enregistrer la valeur par un identifiant est que vous souhaitez couvrir plus d'une valeur dans cette balise, n'est-ce pas?
Voici une solution plus simple:
Supposons que vous souhaitiez enregistrer deux valeurs (Strings) dans cette balise: "firstname" et "lastname". Vous pouvez les enregistrer tous les deux dans une chaîne, séparés par un point-virgule:
... et accédez-y en les divisant en un tableau de chaînes:
la source
vous pouvez utiliser ceci:
private static final int TAG_ONLINE_ID = View.generateViewId() + 2 << 24;
pour un identifiant de ressource spécifique à l'application uniqness
la source