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

44
demandé sur InsaneCat 2017-06-12 10:41:30

8 réponses

Utiliser setText(String), car editText.text attend un Editable, pas String.

93
répondu nhaarman 2017-06-12 07:51:56

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.

19
répondu Rahul Khurana 2018-02-21 08:06:14

si vous voulez utiliser getter .text de principe, utilisez:

nametxt.text = Editable.Factory.getInstance().newEditable(name)
4
répondu Evgeniy Pavlov 2018-04-23 18:14:12

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()
3
répondu BNY 2018-08-11 12:34:35

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)

1
répondu Abhishek Luthra 2018-04-02 15:41:37
editText.setText("Your text here")
0
répondu Masum 2018-08-05 12:32:06

essayez d'utiliser nametxt.post: nametxt.la poste({nametxt.setText("votre texte")})

-2
répondu Denys Lobur 2017-12-19 17:54:35

Regarder l'API de EditText:

void setText (CharSequence text, TextView.BufferType type)

Editable getText ()

https://developer.android.com/reference/android/widget/EditText.html

-4
répondu Wenris 2017-06-12 10:00:55