Je suis nouveau à Kotlin. Parmi d'autres choses très intéressantes, j'ai trouvé les extensions Android qui, according to the documentation, devrait me permettre d'utiliser les vues des activités sans avoir besoin de findViewById
.Les propriétés synthétiques de Kotlin entrent en conflit
En fait, il fonctionne très bien en ajoutant simplement cette ligne dans mes importations:
import kotlinx.android.synthetic.main.<layout>.*
Le problème est lorsque deux mises en page différentes contiennent un widget avec le même identifiant (le même nom pour la propriété synthétique),
par exemple deux différents TextView
s avec l'ID txtTitle
. Dites le premier est sur une activité et le second appartient à la disposition utilisée à l'intérieur d'un adaptateur.
Lorsque j'essaie d'appeler une méthode sur le premier TextView (celui de l'activité), je ne peux pas voir le résultat attendu, comme si l'appel serait fait sur une autre vue. Comme confirmation de ceci, quand j'appelle txtTitle.parent
, je vois le parent et les frères et soeurs de l'autre txtTitle
plutôt que ceux prévus.
Est-ce que je fais quelque chose de mal? La seule façon que j'ai trouvé pour contourner ce problème est d'utiliser des noms différents dans toutes mes mises en page ou continuer à utiliser findViewById
, mais il serait dommage de perdre cette fonction de la langue ...
Je voudrais vous recommander d'utiliser des noms plus complexes pour vos identifiants :) Cela empêche également de "jouer" avec les imports dans mon cas. – UneXp
Je ne sais pas si cela répond à votre question, mais les appels synthétiques sont traduits en appels à 'findviewById' et parce que chaque id ** nom ** est mappé à une valeur unique, peu importe * quelle * importation vous utilisez aussi longtemps comme vous en utilisez un avec le nom correct. –
J'imaginais, mais en réalité ça marche mal. J'ai une activité avec un txtTitle, à l'intérieur de cette activité il y a un fragment avec un RecyclerView: à l'intérieur de RecyclerView il y a des vues avec un txtTitle.Je vois juste ce que j'ai écrit: quand j'utilise le txtTitle dans l'activité, il ne produit pas le résultat attendu (il ne définit pas le texte de TextView); au lieu de cela, si j'utilise findViewById() de l'activité cela fonctionne correctement ... – Massimo