我试图在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。
当前回答
Methods that follow the Java conventions for getters and setters (no-argument methods with names starting with get and single-argument methods with names starting with set) are represented as properties in Kotlin. But, While generating a property for a Java getter/setter pair Kotlin at first looks for a getter. The getter is enough to infer the type of property from the type of the getter. On the other hand, the property will not be created if only a setter is present( because Kotlin does not support set-only properties at this time ) .
当setter开始发挥作用时,属性生成过程变得有点模糊。原因是getter和setter可能有不同的类型。此外,getter和/或setter可以在子类中被重写, 这正是android中的EditText的情况。
在上面的例子中,Android TextView类包含一个getter
CharSequence getText()
和一个setter void
setText(CharSequence)
如果我有一个变量类型的TextView我的代码会工作得很好。 但是我使用了EditText类,它包含一个重写的getter
Editable getText()
这意味着您可以为EditText获取一个可编辑的,并将一个可编辑的设置为EditText。因此,Kotlin合理地创建了一个可编辑类型的合成属性文本。由于String类是不可编辑的,这就是为什么我不能将String实例分配给EditText类的文本属性。
在为Java getter和setter方法生成kotlin属性时,JetBrains似乎忘记了指定getter方法的主要作用。无论如何,我已经通过github向Jet brains kotlin网站提交了拉请求。
我在这篇文章中也详细介绍了上述问题,Kotlin如何从Java getter和setter生成属性(Jetbrains未记录)
其他回答
使用setText(String)作为EditText。文本首先需要一个可编辑的,而不是字符串
为什么?
迈克尔在这个链接下给出了很好的解释。请访问这个链接了解更多细节
在为Java getter/setter对生成合成属性时,Kotlin首先查找getter。getter足以创建具有该getter类型的合成属性。另一方面,如果只有setter,则不会创建该属性。
当setter开始发挥作用时,属性创建变得更加困难。原因是getter和setter可能有不同的类型。此外,getter和/或setter可以在子类中被重写。
Methods that follow the Java conventions for getters and setters (no-argument methods with names starting with get and single-argument methods with names starting with set) are represented as properties in Kotlin. But, While generating a property for a Java getter/setter pair Kotlin at first looks for a getter. The getter is enough to infer the type of property from the type of the getter. On the other hand, the property will not be created if only a setter is present( because Kotlin does not support set-only properties at this time ) .
当setter开始发挥作用时,属性生成过程变得有点模糊。原因是getter和setter可能有不同的类型。此外,getter和/或setter可以在子类中被重写, 这正是android中的EditText的情况。
在上面的例子中,Android TextView类包含一个getter
CharSequence getText()
和一个setter void
setText(CharSequence)
如果我有一个变量类型的TextView我的代码会工作得很好。 但是我使用了EditText类,它包含一个重写的getter
Editable getText()
这意味着您可以为EditText获取一个可编辑的,并将一个可编辑的设置为EditText。因此,Kotlin合理地创建了一个可编辑类型的合成属性文本。由于String类是不可编辑的,这就是为什么我不能将String实例分配给EditText类的文本属性。
在为Java getter和setter方法生成kotlin属性时,JetBrains似乎忘记了指定getter方法的主要作用。无论如何,我已经通过github向Jet brains kotlin网站提交了拉请求。
我在这篇文章中也详细介绍了上述问题,Kotlin如何从Java getter和setter生成属性(Jetbrains未记录)
var name:String = "hello world"
textview.text = name
(or)
var editText:String = "hello world"
textview.setText(name)
或者转换为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"
或者你可以使用extension属性:
var EditText.value
get() = this.text.toString()
set(value) {
this.setText(value)
}
使用.value=代替.text=