In einem Versuch, eine EditText
auf einen Int
-Wert festzulegen, habe ich verschiedene Möglichkeiten zum Konvertieren der Int
in einen Wert versucht, den die EditText
akzeptiert, aber alle schlagen fehl
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
}
Wie kann ich die EditText
auf einen Int
-Wert setzen?
var a: Int = 12
var s: String = a.toString()
Das sollte dafür funktionieren.
Versuchen Sie den angegebenen Code, es wird funktionieren. Was ich hier mache, konvertiere ich inputText zuerst in String und dann in Int. Nachdem ich mit 2 multipliziert habe, weise ich einen Wert für outputText zu, indem ich ihn in string konvertiere.
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)
}
Hier sind ein paar Dinge im Gange, und um sie zu verstehen, werfen wir einen Blick auf die verschiedenen getText
- und setText
-Methoden, die EditText
hat:
Editable getText()
void setText(CharSequence text)
void setText(@StringRes int resid)
// many other setText methods with buffer options
Das, was Kotlin hier für die Verwendung der Eigenschaftssyntax tut, besteht darin, dass eine text
-Eigenschaft erstellt wird. Der Getter für die Immobilie ist offensichtlich, da es nur einen gibt. Der Setter für die Eigenschaft ist soll derjenige sein, der einen CharSequence
-Parameter benötigt (es wäre sinnvoll, Editable
erweitert CharSequence
), aber der Versuch, etwas anderes als eine Editable
zuzuweisen, funktioniert nicht. Siehe diese Ausgabe .
Um zu dem vorliegenden Problem zu gelangen, können Sie den Wert in Ihrer EditText
lesen und in eine String
wie folgt konvertieren:
val input = inputText.text.toString()
Dann können Sie die Funktion toInt()
aus der Standardbibliothek verwenden, um sie in eine Int
zu konvertieren (beachten Sie, dass dies eine Ausnahme auslöst, wenn die String
nicht analysiert werden kann):
val doubled = input.toInt() * 2
Schließlich können Sie den Wert der Variable EditText
festlegen, indem Sie den Parameter setText
im traditionellen Java-Stil aufrufen und eine String
übergeben:
inputText.text.setText(doubled.toString())
Ein bisschen chaotisch wegen der Zwei-Wege-Konvertierung zwischen String
und Int
sowie den Eigenheiten, wie die text
-Eigenschaft hier generiert wird. Dies ist jedoch der Weg. Wenn Sie sich Sorgen machen, wie das aussieht, können Sie immer einen Teil dieses Mechanismus hinter den Erweiterungseigenschaften verbergen.
var num: Int = 5
in string umzuwandeln wäre
num.toString()