在EditText Kotlin中设置文本

Par*_*ngh 101 android android-edittext kotlin

我试图在edittext中设置文本,但它说类型不匹配必需可编辑找到字符串我的代码如下

Type mismatch. 
Required: Editable 
Found: String
Run Code Online (Sandbox Code Playgroud)

不要说使用SetText,因为我使用的是kotlin而不是java

nha*_*man 236

使用setText(String),因为editText.text期望Editable,而不是String.

  • @SMBiggs 非常喜欢 Java,因为 Kotlin 的易用性,好吧,一切。 (3认同)
  • @SMBiggs 哈哈,也许你做到了,因为我深深地爱上了 Kotlin。美好的一天,伙计! (3认同)

Rah*_*ana 32

使用setText(String)EditText.text需要editable在firstplace不串

为什么?

尼斯解释迈克尔下给出这个链接.请访问此链接以获取更多详细信息

当为Java getter/setter对生成合成属性时,Kotlin首先寻找一个getter.getter足以创建一个具有getter类型的合成属性.另一方面,如果只有一个setter出现,则不会创建该属性.

当一个二传手进场时,属性创造变得更加困难.原因是吸气剂和定位器可能具有不同的类型.此外,可以在子类中重写getter和/或setter.


Evg*_*lov 15

如果您想.text从原则上使用getter ,请使用:

nametxt.text = Editable.Factory.getInstance().newEditable(name)
Run Code Online (Sandbox Code Playgroud)


BNY*_*BNY 14

这里有几个工作答案,但是如果您仍然想要使用属性格式并让代码看起来干净,那么您可以编写一个扩展名:

fun String.toEditable(): Editable =  Editable.Factory.getInstance().newEditable(this)
Run Code Online (Sandbox Code Playgroud)

然后你可以这样使用它:

mEditText.text = myString.toEditable()
Run Code Online (Sandbox Code Playgroud)

  • 扩展方法比使用旧的 java setText 更好。 (3认同)
  • 最好对编辑文本进行扩展: fun EditText.setEditableText(text:String){ this.text = Editable.Factory.getInstance().newEditable(text) } (2认同)

Ren*_*tik 10

或者投射到,TextView但我相信这应该在 kotlin 端修复,以方便开发人员!

(someEditText as TextView).text = "someTextValue"
Run Code Online (Sandbox Code Playgroud)

或者使用一些扩展:

val EditText.asTextView: TextView get() = this as TextView

var EditText.value: CharSequence? 
    get() = asTextView.text
    set(value) {
        asTextView.text = value
    }
Run Code Online (Sandbox Code Playgroud)

你可以写:

someEditText.asTextView.text = "someTextValue"
Run Code Online (Sandbox Code Playgroud)

或者

someEditText.value = "someTextValue"
Run Code Online (Sandbox Code Playgroud)

但遗憾的是你不能 简单的someEditText.text = "someTextValue"


let*_*oll 6

或者您可以使用扩展属性:

var EditText.value
    get() = this.text.toString()
    set(value) {
            this.setText(value)
    }
Run Code Online (Sandbox Code Playgroud)

并使用.value=代替.text=


小智 6

简单的解决方案

只需使用edittext.setText(yourdata) 而不是edittext.text因为EditText是可编辑的,edittext.text而是用于TextView

例如:

var name:String = "Muzammil"
edittext.setText(name)
Run Code Online (Sandbox Code Playgroud)

这就是它对我的工作。