我试图在EditText中设置文本,但它说:
Type mismatch.
Required: Editable
Found: String
我的代码如下:
String name = "Paramjeet"
val nametxt = findViewById (R.id.nametxt) as EditText
nametxt.text = name
不要说使用setText,因为我使用的是kotlin,而不是Java。
我试图在EditText中设置文本,但它说:
Type mismatch.
Required: Editable
Found: String
我的代码如下:
String name = "Paramjeet"
val nametxt = findViewById (R.id.nametxt) as EditText
nametxt.text = name
不要说使用setText,因为我使用的是kotlin,而不是Java。
当前回答
或者转换为TextView,但我相信这应该在kotlin方面确定为方便开发人员!
(someEditText as TextView).text = "someTextValue"
或者有一些扩展:
val EditText.asTextView: TextView get() = this as TextView
var EditText.value: CharSequence?
get() = asTextView.text
set(value) {
asTextView.text = value
}
你可以这样写:
someEditText.asTextView.text = "someTextValue"
or
someEditText.value = "someTextValue"
但遗憾的是,您不能编写简单的someEditText。text = "someTextValue"
其他回答
使用setText(String)作为EditText。文本首先需要一个可编辑的,而不是字符串
为什么?
迈克尔在这个链接下给出了很好的解释。请访问这个链接了解更多细节
在为Java getter/setter对生成合成属性时,Kotlin首先查找getter。getter足以创建具有该getter类型的合成属性。另一方面,如果只有setter,则不会创建该属性。
当setter开始发挥作用时,属性创建变得更加困难。原因是getter和setter可能有不同的类型。此外,getter和/或setter可以在子类中被重写。
使用setText(String),因为editText。text需要一个可编辑的,而不是字符串。
这里有几个有效的答案,但如果你仍然想使用属性格式并让你的代码看起来干净,你可以写一个扩展:
fun String.toEditable(): Editable = Editable.Factory.getInstance().newEditable(this)
然后你可以这样使用它:
mEditText.text = myString.toEditable()
简单的解决方案
只需使用edittext. settext (yourdata)而不是edittext。因为EditText是可编辑的,EditText。text用于TextView
例如:
var name:String = "Muzammil"
edittext.setText(name)
这就是我的工作。
val editable = Editable.Factory.getInstance().newEditable(savedString)
editText.text = editable