Setting text in EditText Kotlin

2019-02-07 15:44发布

I am trying to set text in a edittext but it says Type mismatch Required Editable found string my code is as follow

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

Dont say to use SetText because i am using kotlin not java

9条回答
神经病院院长
2楼-- · 2019-02-07 16:12

If you want to use getter .text from principle, use:

nametxt.text = Editable.Factory.getInstance().newEditable(name)
查看更多
太酷不给撩
3楼-- · 2019-02-07 16:18

Try using nametxt.post: nametxt.post({nametxt.setText("your text")})

查看更多
▲ chillily
4楼-- · 2019-02-07 16:20

Use setText(String), since editText.text expects an Editable, not a String.

查看更多
我想做一个坏孩纸
5楼-- · 2019-02-07 16:21

or you can use an extension propertie:

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

and use .value= instead of .text=

查看更多
贪生不怕死
6楼-- · 2019-02-07 16:23

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 ) .

When a setter comes into play, property generation process becomes a bit ambiguous. The reason is that the getter and the setter may have different type. Moreover, the getter and/or the setter may be overridden in a subclass , which exactly is the case of EditText in android.

In above case the Android TextView class contains a getter

CharSequence getText() 

and a setter void

setText(CharSequence)

If I had a variable of type TextView my code would have worked fine. But I used EditText class which contains an overridden getter

Editable getText()

which means that you can get an Editable for an EditText and set an Editable to an EditText. Therefore, Kotlin reasonably creates a synthetic property text of type Editable. As String class is not Editable, that’s why I cannot assign a String instance to the text property of the EditText class.

It Seems like JetBrains forgot to specify the dominant role of getter methods while generating kotlin properties for Java getter and setter methods. Anyways, I have submitted pull request to Jet brains kotlin website through github.

I have detailed above problem in this medium post too How Does Kotlin Generate Property from Java Getters and Setters (Undocumented by Jetbrains)

查看更多
太酷不给撩
7楼-- · 2019-02-07 16:28

There are several working answers here, but if you still want to use the property format and have your code look clean, you could write an extension:

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

You can then use it as such:

mEditText.text = myString.toEditable()
查看更多
登录 后发表回答