Mise en place du texte dans EditText Kotlin
j'essaie de mettre du texte dans un texte édité mais il est dit que Type mismatch Required Editable found string mon code est comme suit
String name = "Paramjeet"
val nametxt = findViewById (R.id.nametxt) as EditText
nametxt.text = name
Ne dites pas D'utiliser SetText parce que j'utilise kotlin pas java
8 réponses
Utiliser setText(String)
, car editText.text
attend un Editable
, pas String
.
Utiliser setText(String)
EditText.text
nécessite une editable
à firstplace pas de Chaîne
pourquoi ?
Belle explication par Michael donné ce lien. Visitez ce lien pour plus de détails
lors de la génération d'une propriété synthétique pour une paire Java getter/setter Kotlin cherche d'abord un getter. Le getter est suffisant pour créer une propriété synthétique avec un type de getter. D'autre part, le la propriété ne sera pas créé si seulement un poseur de cadeaux.
Lorsqu'un setter entre en jeu, la création de propriété devient plus difficile. La raison en est que le getter et le setter peuvent avoir un type différent. De plus, le getter et/ou le setter peuvent être dépassés dans une sous-classe.
si vous voulez utiliser getter .text
de principe, utilisez:
nametxt.text = Editable.Factory.getInstance().newEditable(name)
il y a plusieurs réponses de travail ici, mais si vous voulez toujours utiliser le format de propriété et avoir votre code propre, vous pouvez écrire une extension:
fun String.toEditable(): Editable = Editable.Factory.getInstance().newEditable(this)
Vous pouvez ensuite l'utiliser comme tel:
mEditText.text = myString.toEditable()
les méthodes qui suivent les conventions Java pour getters et setters (les méthodes sans argument avec les noms commençant par get et les méthodes avec un seul argument avec les noms commençant par set) sont représentées comme propriétés dans Kotlin. Mais, tout en générant une propriété pour une paire Java getter/setter Kotlin cherche d'abord un getter. Le getter est suffisant pour déduire le type de propriété du type du getter. D'autre part, la propriété ne sera pas créé si seulement un setter est présent( parce que Kotlin n'a pas le soutien seulement des propriétés en ce moment ) .
Lorsqu'un setter entre en jeu, le processus de génération de propriété devient un peu ambigu. La raison en est que le getter et le setter peuvent avoir un type différent. En outre, le getter et/ou le setter peuvent être dépassés dans une sous-classe , ce qui est exactement le cas D'EditText sur android.
dans le cas ci-dessus, la classe Android TextView contient un getter
CharSequence getText()
et un setter vide
setText(CharSequence)
si j'avais une variable de type TextView, mon code aurait bien fonctionné. Mais J'ai utilisé la classe EditText qui contient un getter
Editable getText()
ce qui signifie que vous pouvez obtenir un modifiable pour un texte édité et définir un modifiable à un texte édité. Par conséquent, Kotlin crée raisonnablement un texte de propriété synthétique de type modifiable. Comme String class n'est pas modifiable, c'est pourquoi je ne peux pas assigner une instance String à la propriété text de L'EditText classe.
il semble que JetBrains a oublié de spécifier le rôle dominant des méthodes getter tout en générant des propriétés kotlin pour les méthodes Java getter et setter. Quoi qu'il en soit, j'ai soumis une demande de pull au site Web de jet brains kotlin par github.
je l'ai détaillé ci-dessus problème dans ce milieu post trop Comment Kotlin Générer de la Propriété à partir de Java Getters et les Setters (sans-papiers par Jetbrains)
essayez d'utiliser nametxt.post: nametxt.la poste({nametxt.setText("votre texte")})
Regarder l'API de EditText:
void setText (CharSequence text, TextView.BufferType type)
Editable getText ()