found extensions edittext editable android kotlin android-edittext

extensions - set text to edittext android kotlin



Establecer texto en EditText Kotlin (10)

Aquí hay varias respuestas que funcionan, pero si aún desea utilizar el formato de propiedad y hacer que su código se vea limpio, puede escribir una extensión:

mEditText.text = myString.toEditable()

Luego puede usarlo como tal:

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

Estoy tratando de configurar el texto en un EditText pero dice:

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

Mi código es el siguiente:

nametxt.text = Editable.Factory.getInstance().newEditable(name)

No diga que use setText porque estoy usando kotlin, no Java.


Intente usar nametxt.post: nametxt.post ({nametxt.setText ("su texto")})


Los métodos que siguen las convenciones de Java para getters y setters (métodos sin argumento con nombres que comienzan con get y métodos de argumento único con nombres que comienzan con set) se representan como propiedades en Kotlin. Pero, mientras genera una propiedad para un par de getter / setter de Java, Kotlin al principio busca un getter. El captador es suficiente para inferir el tipo de propiedad del tipo del captador. Por otro lado, la propiedad no se creará si solo está presente un setter (porque Kotlin no admite propiedades de solo set en este momento).

Cuando un setter entra en juego, el proceso de generación de propiedades se vuelve un poco ambiguo. La razón es que el getter y el setter pueden tener un tipo diferente. Además, el getter y / o el setter pueden anularse en una subclase, que es exactamente el caso de EditText en Android.

En el caso anterior, la clase Android TextView contiene un captador

setText(CharSequence)

y un setter nulo

Editable getText()

Si tuviera una variable de tipo TextView, mi código habría funcionado bien. Pero usé la clase EditText que contiene un captador anulado

editText.setText("Your text here")

lo que significa que puede obtener un Editable para un EditText y establecer un Editable en un EditText. Por lo tanto, Kotlin crea razonablemente un texto de propiedad sintética de tipo Editable. Como la clase String no es editable, es por eso que no puedo asignar una instancia de String a la propiedad de texto de la clase EditText.

Parece que JetBrains se olvidó de especificar el papel dominante de los métodos getter al generar propiedades kotlin para los métodos getter y setter de Java. De todos modos, he enviado una solicitud de extracción al sitio web de Jet brains kotlin a través de github.

También he detallado el problema anterior en esta publicación de medio. ¿Cómo genera Kotlin propiedades a partir de getters y setters de Java?



O puede usar una propiedad de extensión:

CharSequence getText()

y use .value= lugar de .text=


Si desea utilizar getter .text desde el principio, use:

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


Use setText(String) , ya que editText.text espera un Editable , no un String .


Use setText(String) ya que EditText.text requiere un editable en primer lugar, no String

POR QUÉ ?

Buena explicación de Michael dada bajo este enlace . Visite este enlace para más detalles.

Al generar una propiedad sintética para un par getter / setter de Java, Kotlin primero busca un getter. El captador es suficiente para crear una propiedad sintética con un tipo de captador. Por otro lado, la propiedad no se creará si solo se presenta un setter.

Cuando un setter entra en juego, la creación de propiedades se vuelve más difícil. La razón es que el getter y el setter pueden tener un tipo diferente. Además, el getter y / o el setter pueden ser anulados en una subclase.


setText (String), por lo que debe establecer su cadena de texto para editText, por lo que en su caso es: nametxt.setText (name)


editText.setText("Your text here")