EditText en Kotlin : 5 façons de définir un texte et laquelle choisir

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Introduction : une ligne — un million de questions

\n

Avez-vous déjà écrit dans votre code editText.text = "Bonjour" et obtenu une erreur de compilation ? Ou, au contraire, le code fonctionnait, mais l'IDE soulignait la ligne en jaune ? Félicitations : vous avez rencontré le « casse-tête » classique de tout développeur Android qui passe à Kotlin.

\n

Le sujet Setting text in EditText Kotlin est l'une des requêtes les plus populaires sur Stack Overflow (des milliers de vues !). À première vue, la tâche est triviale : prendre et assigner une valeur. Mais en Kotlin, il y a des nuances qui transforment une simple opération en un terrain de débat. Dans cet article, nous allons analyser toutes les approches actuelles : de l'ancien findViewById au moderne view binding et DataBinding. Vous découvrirez quelle méthode choisir pour un nouveau projet et comment éviter les pièges liés aux types de données.

\n

C'est parti ! 🚀

\n\n

Pourquoi simplement « text = ... » ne fonctionne-t-il pas ?

\n

Si vous essayez d'écrire :

\n
val editText = findViewById<EditText>(R.id.my_edit_text)\neditText.text = "Nouveau texte"
\n

Le compilateur affichera une erreur : Type mismatch. Required: Editable! Found: String.

\n

Tout est dû au fait que la propriété text de EditText est de type Editable (et non String). En Java, nous étions habitués à setText(CharSequence), mais Kotlin « sous le capot » traduit cela en un setter de propriété qui attend un Editable. Il existe une solution — et pas qu'une seule.

\n\n

Méthode n°1 : La classique — findViewById + setText

\n

La méthode la plus directe, qui fonctionne depuis le SDK 1.0. Elle ne nécessite pas de bibliothèques supplémentaires et est compréhensible même pour un débutant.

\n
val editText = findViewById<EditText>(R.id.my_edit_text)\neditText.setText("Bonjour le monde !")
\n

Ici, nous appelons la méthode Java setText(CharSequence), qui accepte une chaîne de caractères. En Kotlin, cela ressemble à un appel de fonction ordinaire.

\n

Avantages :

\n
    \n
  • Minimum de code
  • \n
  • Ne nécessite pas d'imports (sauf les imports de base)
  • \n
  • Fonctionne dans tout fragment/activité
  • \n
\n

Inconvénients :

\n
    \n
  • Recherche manuelle de la vue — facile de se tromper dans l'id
  • \n
  • Null safety non garantie : il faut vérifier la nullité
  • \n
  • Plus lent que le binding (mais pour un seul champ, la différence est imperceptible)
  • \n
\n

Quand l'utiliser : dans les projets legacy, dans le code pour un prototypage rapide ou dans les situations où vous savez avec certitude que la vue existe.

\n\n

Méthode n°2 : Kotlin Android Extensions (synthétiques)

\n

Auparavant, c'était la « solution miracle » pour les développeurs Kotlin. Vous écriviez simplement my_edit_text.text = "Texte" — et tout fonctionnait. La magie résidait dans la génération automatique de propriétés synthétiques.

\n
// build.gradle (app) — il fallait auparavant ajouter :\n// apply plugin: 'kotlin-android-extensions'\n// Maintenant, le plugin est obsolète !\n\n// Dans le code :\nimport kotlinx.android.synthetic.main.activity_main.*\n\nmy_edit_text.setText("Texte via les synthétiques")
\n

Avantages :

\n
    \n
  • Très concis
  • \n
  • Pas besoin d'écrire findViewById
  • \n
  • Prenait en charge la null safety à l'origine
  • \n
\n

Inconvénients :

\n
    \n
  • Le plugin est déclaré obsolète (deprecated) depuis Kotlin 1.8. Google recommande de migrer vers View Binding
  • \n
  • Ne fonctionne pas avec les fragments si le layout est réutilisé
  • \n
  • Crée un contexte global — des fuites de mémoire possibles
  • \n
\n

Important : Si vous commencez un nouveau projet en 2024–2025 — n'utilisez pas cette approche. Pour les anciens projets — planifiez la migration.

\n\n

Méthode n°3 : View Binding — le standard moderne

\n

Aujourd'hui, View Binding est la méthode officiellement recommandée pour travailler avec les vues dans Android. Il génère une classe Binding pour chaque fichier layout, donnant accès à chaque vue par son nom.

\n
// 1. Activer dans build.gradle (app) :\nandroid {\n    ...\n    buildFeatures                

Blogs

Book Recommendations