Ответ 1
var a: Int = 12
var s: String = a.toString()
Это должно сработать для этого.
В попытке установить для 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
. Геттер, используемый для свойства, очевиден, так как есть только один. Предполагается, что установщиком для свойства является тот, который принимает параметр CharSequence
(это имеет смысл, Editable
расширяет CharSequence
), но на самом деле пытаться назначить что-либо, кроме Editable
не будет работать. См. Эту проблему.
Чтобы перейти к проблеме, вы можете прочитать значение в своем EditText
и преобразовать его в String
следующим образом:
val input = inputText.text.toString()
Затем вы можете использовать toInt()
из стандартной библиотеки, чтобы преобразовать ее в Int
(помните, что это вызовет исключение, если String
не может быть проанализирована):
val doubled = input.toInt() * 2
И, наконец, вы можете установить значение EditText
, вызвав setText
setter в традиционном стиле Java, передав в String
:
inputText.text.setText(doubled.toString())
Немного беспорядок из-за двухстороннего преобразования между String
и Int
, плюс странности того, как здесь генерируется text
свойство, но это способ сделать это. Если вы обеспокоены тем, как это выглядит, вы всегда можете скрыть некоторые из этих механизмов за свойствами расширения.
var num: Int = 5
преобразовать в строку будет
num.toString()