• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

336
Views
¿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 3 years ago · Santiago Trujillo
1 answers
Answer question

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 3 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error