0

我想将绑定 adepter 设置为 editText 以便它始终接受大写,即使用户键入小写然后它会自动将其转换为大写。为此,我正在使用这样的数据绑定和绑定适配器。

绑定适配器.kt

@BindingAdapter(value = ["app:alwaysCapital", "custom:holderAttrChanged"], requireAll = false)
fun setHolder(editText : EditText,text: String?, listener : InverseBindingListener) {
    
    if (text != null) {
        editText.setText(text)
        editText.setSelection(text.length)
    }
    listener.onChange()
    editText.doOnTextChanged{ _ : CharSequence?, _ : Int, _ : Int, _ : Int ->
        listener.onChange()
    }
}
@InverseBindingAdapter(attribute = "app:alwaysCapital", event = "custom:holderAttrChanged")
fun getHolder(editText : EditText) : String? {
      return editText.text.toString().toUpperCase()
}

编辑文本 xml

  <EditText
        android:id="@+id/dfsc"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_column="3"
        android:layout_marginStart="8dp"
        android:layout_marginLeft="8dp"
        android:hint="@string/lname"
        app:alwaysCapital="@={viewModel.txtName}"
        android:imeOptions="actionNext"
        android:inputType="text" />

在 ViewModel 中

   val txtName = MutableLiveData<String>()

当我打开此活动时,它会引发错误,如下图所述。 在此处输入图像描述

4

0 回答 0