92 votes

ajouter programmatiquement l'id à R.id

Je crée un EditText que j'essaie ensuite de référencer dans un test unitaire. Quelle est la meilleure façon d'ajouter un nouvel objet id a R.id pour cet objet créé dynamiquement, afin que je puisse le référencer plus tard via findViewById() dans le test unitaire ?

0 votes

215voto

Hidden Android Points 1284

Vous pouvez définir les ID que vous utiliserez plus tard dans la classe R.id à l'aide d'un fichier de ressources xml, et laisser le SDK Android leur donner des valeurs uniques lors de la compilation.

res/values/ids.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <item name="my_edit_text_1" type="id"/>
    <item name="my_button_1" type="id"/>
    <item name="my_time_picker_1" type="id"/>

</resources>

Pour l'utiliser dans le code :

myEditTextView.setId(R.id.my_edit_text_1);

1 votes

Puis-je appeler le fichier anothername.xml ?

2 votes

Désolé pour cette réponse tardive, mais oui, comme pour toutes les ressources Android, vous pouvez nommer ce fichier .xml comme vous le souhaitez...

2voto

Shojaeddin Points 843

Vous pouvez utiliser setId pour chaque vue et attribuer n'importe quel nombre positif, en fonction du développeur google :

Définit l'identifiant pour cette vue. L'identifiant ne doit pas nécessairement être unique dans la hiérarchie de cette vue. L'identifiant doit être un nombre positif. Lien

afin que vous puissiez utiliser

EveryView.setId(int);

0voto

Amin Keshavarzian Points 143

Voici ma solution en tant que fonction d'extension en kotlin :

/* sets a valid id that isn't in use */
fun View.findAndSetFirstValidId() {
    var i: Int
    do {
        i = Random.nextInt()
    } while (findViewById<View>(i) != null)
    id = i
}

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