4

Je ne sais pas pourquoi il arrive:Android: programme setId est donne un avertissement de type ressource prévue id

Si j'écris le code suivant:

TextView textView = new TextView(this); 
textView.setId(1); 

le comme id non de travail et de me donner un avertissement comme:

enter image description here

Son ne fonctionne pas dans les valeurs suivantes:

textView.setId(0+1); // Valid 
textView.setId(var++); // Valid even var=0 

mais pas valable

textView.setId(1);  // Invalide 

Quelqu'un sait à ce sujet? Quelqu'un peut-il expliquer ces choses?

+0

Je pense qu'il considère le symbole '+' pour l'avertissement car '+' est également présent lors de l'envoi de l'ID via xml –

+0

Pourquoi voulez-vous définir l'ID du tout? – Alexey

+0

Je veux juste savoir pourquoi cela arrive. J'ai mis l'identification en raison des vues dynamiques. @Alexey –

Répondre

0

Vous recevez un avertissement parce que définir vos propres ID peut être dangereux, vous pouvez par exemple définir le même ID qu'un élément xml déjà existant, cela va évidemment entrer en collision et causer des problèmes. Utilisez plutôt View.generateViewId() pour empêcher cela.

+0

Pensez-vous vraiment? –

+0

Le nom (android: id = "...") que vous donnez à un élément xml est analysé en entier, ce sera un très grand nombre, comme 28858383 ou quelque chose, hypothétiquement cela permet de définir un identifiant dupliqué à une autre vue par programmation. En utilisant la méthode View.generateViewId(), vous serez sûr qu'aucun ID ne se heurtera aux éléments déjà existants. Aussi, si je me souviens bien, les ID générés vont commencer à partir de 1 et remonter. – Jeffalee

+0

'Possibilité 'vous avez dit. Cela sera vérifié lors de l'exécution et non lors de la compilation. –

1

Cet avertissement est généré par android lint. Il vérifie que vous utilisez le bon type d'identifiant comme identifiant. Signature pour cette fonction est:

public void setId(@IdRes int id) 

Ainsi, les chèques de peluches que vous utilisez exactement id de type @IdRes (voir IdRes annotation), non @ColorRes ou @StringRes (il vérifie que vous utilisez des constantes de la classe R.id)

Par en utilisant des expressions comme 0+1 ou var++ (BTW, le résultat est en réalité 0 et non 1) vous entravent peluches pour inférer le type d'argument.