Estoy tratando de configurar el texto en un EditText pero dice:
Type mismatch.
Required: Editable
Found: String
Mi código es el siguiente:
String name = "Paramjeet"
val nametxt = findViewById (R.id.nametxt) as EditText
nametxt.text = name
No diga usar setText
porque estoy usando kotlin, no Java.
android
kotlin
android-edittext
Paramjeet Singh
fuente
fuente
nexttxt.setText(name)
sin ningún hallazgo o casting.Respuestas:
Uso
setText(String)
, ya queeditText.text
espera unEditable
, no unString
.fuente
Use
setText(String)
como seEditText.text
requiereeditable
en primer lugar, no StringPOR 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.
fuente
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:
Luego puede usarlo como tal:
fuente
Si desea utilizar getter
.text
desde el principio, use:fuente
O puede usar una propiedad de extensión:
y usar en
.value=
lugar de.text=
fuente
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, al generar una propiedad para un par 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
y un setter nulo
Si tuviera una variable de tipo TextView, mi código habría funcionado bien. Pero usé la clase EditText que contiene un captador anulado
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 olvidó 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 captadores y establecedores de Java (sin documentar por Jetbrains)?
fuente
Tuve el mismo problema en mis proyectos, les doy un ejemplo que muestra cómo recuperar y establecer datos en los diseños usando Kotlin: hay un botón
save_button
y dos campos de edición de textoedit_name
yedit_password
.fuente
Solución simple
Simplemente use
edittext.setText(yourdata
) en lugar deedittext.text
porque EditText es editable,edittext.text
se usa paraTextView
Por ejemplo:
Ese es su trabajo para mí.
fuente
Usar así:
fuente
setText (String), por lo que debe establecer su cadena de texto para editText, por lo que en su caso es: nametxt.setText (name)
fuente
O fundido a
TextView
pero yo creo que esto debe fijarse en el lado Kotlin seguro para mayor comodidad de los desarrolladores!O con algunas extensiones:
Puedes escribir:
o
Pero lamentablemente no puedes escribir simple
someEditText.text = "someTextValue"
fuente
Mira la API de EditText:
void setText (CharSequence text, TextView.BufferType type)
Editable getText ()
Enlace: https://developer.android.com/reference/android/widget/EditText.html
fuente
Intente usar nametxt.post: nametxt.post ({nametxt.setText ("su texto")})
fuente