Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

437
Vistas
¿Cómo usar el adaptador de enlace inverso en Kotlin para convertir texto en minúsculas a mayúsculas?

Estoy creando una aplicación de Android en la que quiero usar una función en la que un texto que hemos ingresado en un campo editText se puede convertir a mayúsculas en tiempo de ejecución solo en ese campo editText en particular.

He probado con este código

 editText.addTextChangedListener(object : TextWatcher { override fun afterTextChanged(s: Editable?) { } override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { } override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { this.text.toString().uppercase() } })

Pero se puede hacer fácilmente con el concepto de adaptador de enlace inverso en Android. He intentado implementarlo con referencia a https://developer.android.com/reference/android/databinding/InverseBindingAdapter

No me funciona en mi proyecto. ¿Puedes explicarme con una explicación paso a paso?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Sí, este método de addTextChangedListener está disponible, pero tenemos que implementar este método para todos y cada uno de los Edittext que queremos convertir a mayúsculas. Así que escuchó bien sobre el adaptador InverseBinding. En InverserBinding Adapter, tenemos que crear este método una vez y puede usarlo cualquier cantidad de veces.

Implementé esto usando BindingAdapter e InverseBinding Adapter. En un archivo Kotlin, escriba estas dos funciones de la siguiente manera. Código de función

 @BindingAdapter(value = ["setText", "custom:AttrChanged"], requireAll = false) fun EditText.updateText(text: String?, listener: InverseBindingListener) { if (this.text.toString() != text) { this.setText(text) } this.doOnTextChanged { _: CharSequence?, _: Int?, _: Int?, _: Int? -> listener.onChange() } } @InverseBindingAdapter(attribute = "setText", event = "custom:AttrChanged") fun EditText.getUpdatedText(): String? { return this.text.toString().uppercase() }

Para Upper Case, he creado una variable en mayúsculas de MutableLiveData de tipo String

 var uppercase = MutableLiveData("")

Ahora en XML he establecido esa propiedad de la siguiente manera:

 <androidx.appcompat.widget.AppCompatEditText android:id="@+id/edit_txt" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="30dp" setText="@={viewModels.uppercase}" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/btn_login_data_binding" />
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda