EditText
をInt
値に設定しようとして、Int
をEditText
が受け入れる値に変換するさまざまな方法を試しました。 、しかしすべて失敗する:
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
}
EditText
をInt
値に設定するにはどうすればよいですか?
var a: Int = 12
var s: String = a.toString()
これでうまくいくはずです。
動作する特定のコードを試してください。ここでやっていることは、まずinputTextをStringに、次にIntに変換しています。 2を掛けた後、文字列に変換してoutputTextの値を割り当てています。
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)
}
ここではいくつかのことが行われています。それらを理解するために、getText
が持つさまざまなsetText
およびEditText
メソッドを見てみましょう。
_Editable getText()
void setText(CharSequence text)
void setText(@StringRes int resid)
// many other setText methods with buffer options
_
そのため、ここでKotlinがプロパティ構文を使用できるようにするために、text
プロパティを作成します。プロパティに使用されるゲッターは明らかです。1つしかないためです。プロパティのセッターは、想定されるCharSequence
パラメーターを取る(_理にかなっている、Editable
はCharSequence
を拡張しますが、実際にはEditable
以外のものを割り当てようとしても機能しません。 この問題 を参照してください。
当面の問題を解決するには、EditText
の値を読み取り、次のようにString
に変換します。
_val input = inputText.text.toString()
_
次に、標準ライブラリのtoInt()
関数を使用して、それをInt
に変換できます(String
ができない場合、例外をスローすることに注意してください)解析済み):
_val doubled = input.toInt() * 2
_
最後に、従来のJavaスタイルでEditText
setterを呼び出し、setText
を渡すことにより、String
の値を設定できます。 :
_inputText.text.setText(doubled.toString())
_
String
とInt
の間の双方向変換に加えて、ここでtext
プロパティが生成される方法の奇妙さのために、少し混乱しますが、それが方法ですそれ。この見た目が気になる場合は、このメカニズムの一部を拡張プロパティの背後に常に隠すことができます。
var num: Int = 5
文字列に変換するには
num.toString()