Pour tenter de définir une variable EditText
sur une valeur Int
, j'ai essayé différentes méthodes pour convertir la variable Int
en une valeur que la variable EditText
acceptera, mais toutes échouent:
processButton.setOnClickListener {
var intNo = inputText.text as Int
intNo *= 2
outputText.text = intNo as String // error = "required editable"
outputText.text = intNo.toString() // err: type mismatch
outputText.text = Int.toString(intNo) // type mismatch reqd editable
outputText.text = "What is going on?" // type mismatch reqd editable
}
Comment définir la EditText
sur une valeur Int
?
var a: Int = 12
var s: String = a.toString()
Cela devrait fonctionner pour cela.
Essayez le code donné cela fonctionnera. Ce que je fais ici, je convertis d'abord inputText en String, puis Int. Après avoir multiplié par 2, j'attribue une valeur pour outputText en convertissant en chaîne.
processButton.setOnClickListener {
var intNo = inputText.text.toString().toInt()
intNo *= 2
//println(intNo.toString())
val myString = intNo.toString()
// If you using outputText as Editable then use this
outputText.text = SpannableStringBuilder(myString)
}
Il y a quelques choses qui se passent ici, et pour les comprendre, examinons les différentes méthodes getText
et setText
que EditText
a:
Editable getText()
void setText(CharSequence text)
void setText(@StringRes int resid)
// many other setText methods with buffer options
Donc, ce que Kotlin fait ici pour vous permettre d’utiliser la syntaxe de la propriété, c’est qu’il crée une propriété text
. Le getter utilisé pour la propriété est évident, car il n'y en a qu'un. Le paramètre défini pour la propriété est est supposé être celui qui prend un paramètre CharSequence
(cela aurait du sens, Editable
rallonge CharSequence
), mais essayer en réalité de lui affecter autre chose que Editable
ne fonctionnera pas. Voir ce numéro .
Pour accéder au problème, vous pouvez lire la valeur dans votre EditText
et la convertir en un String
comme ceci:
val input = inputText.text.toString()
Ensuite, vous pouvez utiliser la fonction toInt()
de la bibliothèque standard pour la convertir en Int
(sachez que cela lève une exception si la String
ne peut pas être analysée):
val doubled = input.toInt() * 2
Enfin, vous pouvez définir la valeur de la variable EditText
en appelant le paramètre setText
dans le style Java traditionnel, en transmettant une variable String
:
inputText.text.setText(doubled.toString())
Un peu le bordel à cause de la conversion dans les deux sens entre String
et Int
, plus les bizarreries de la façon dont la propriété text
est générée ici, mais c'est le moyen de le faire. Si cela vous gêne, vous pouvez toujours masquer une partie de ce mécanisme derrière les propriétés des extensions.
var num: Int = 5
convertir en chaîne serait
num.toString()