我试图在EditText中设置文本,但它说:

Type mismatch. 
Required: Editable 
Found: String

我的代码如下:

String name = "Paramjeet"
val nametxt = findViewById (R.id.nametxt) as EditText
nametxt.text = name

不要说使用setText,因为我使用的是kotlin,而不是Java。


当前回答

这里有几个有效的答案,但如果你仍然想使用属性格式并让你的代码看起来干净,你可以写一个扩展:

fun String.toEditable(): Editable =  Editable.Factory.getInstance().newEditable(this)

然后你可以这样使用它:

mEditText.text = myString.toEditable()

其他回答

或者转换为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),所以你必须setText你的字符串到editText,所以在你的情况下是:nametext .setText(name)

我在我的项目中也有同样的问题,我给你一个例子,展示了如何检索和设置Kotlin布局中的数据: 有一个按钮save_button和两个文本编辑字段edit_name和edit_password。

 //when cliquing on the button 'save_button' 
    save_button.setOnClickListener {
    // geting the value from the two fields by using .text.toString()
                val email =  edit_name.text.toString()
                val password = edit_password.text.toString()
    // showing the result on the systeme's log 
                    Log.d("Main activity","your email is " + email )
                    Log.d("Main activity", "your password is $password" )
    // Then shows these values into the text view palete using  .setText()
                    text_view.setText("$email " + "$password")
                }

或者你可以使用extension属性:

var EditText.value
    get() = this.text.toString()
    set(value) {
            this.setText(value)
    }

使用.value=代替.text=