我正在创建一个android应用程序,我想在其中使用一个功能,我们在editText字段中输入的文本在运行时只能在特定的editText字段中转换为大写.

我试过这个代码

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()
  }
 })

但在android中,反向绑定适配器的概念很容易实现.我已经试着参照

在我的项目中,它对我不起作用.你能一步一步地给我解释一下吗?

推荐答案

是的,addTextChangedListener的这个方法是可用的,但是我们必须 for each 我们想要转换成大写的Edittext实现这个方法.所以你对反向绑定适配器的了解是正确的.在InverserBinding Adapter中,我们必须一次性创建此方法,并且您可以多次使用它.

我已经使用BindingAdapter和InverseBinding Adapter实现了这一点.在一个Kotlin文件中,按如下方式编写这两个函数.

@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()
}

对于大写,我创建了一个字符串类型的MutableLiveData大写变量

var uppercase = MutableLiveData("")

现在,在XML中,我将该属性设置为:

<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" />

Android相关问答推荐

了解数据加载在Kotlin中的工作原理

如何检测HitTest是否命中给定的网格对象?

Jetpack Compose和Android Studio中的普通设计工具有什么不同?

保护所有程序包文件和类

空数据来自改装

如何检测低性能 Android 设备进行条件动画渲染?

Jetpack Compose 使用 SavedStateHandle 发送返回结果不适用于 ViewModel 中注入的 SavedStateHandle

如何在另一个函数中初始化主类参数? (我是初学者)代码推荐

如何在C++中使用JNI_GetCreatedJavaVMs调用Java代码

在本地通知中设置自定义声音

修复报错 RecyclerView: No adapter attached;跳过布局

在 kotlin 中动态添加 GridView

如何在 React Native 下载文件之前打开文件管理器并 Select 一个目录

服务似乎在启动时忽略传递的变量

单击过go 的文章时 NewsApp 崩溃

无法为:app@debug/compileClasspath解析依赖项com.github.dhaval2404:imagepicker-support:1.7.1

如何在 kotlin 的 android room DB 中设置一对多关系

如何使用 Glide 将图像下载到设备内部存储

Android全屏AlertDialog

react-native android项目未找到错误