如何在observableField中突变一个输入的字符串。

问题描述 投票:0回答:1

我有以下字段绑定到editText。

val lastName = ObservableField(MutableLiveData<String>())

我想突变输入的字符串,使第一个字母自动设置为大写。

因此,如果你输入

williams -> Williams

我想我可以通过以下方式解决这个问题

    lastName.getObservable()
        .subscribe { input ->
            val lastname = input.decapitalize()
            lastName.getField().postValue(lastname.capitalize())
        }

我注意到这样做,会让我陷入一个永恒的循环,因为postvalue每次都会触发订阅。我如何通过RxJava突变传入的字符串,而不需要用我现在的方式来做?

android kotlin rx-java
1个回答
1
投票

你可以在源码中通过重写 set. 我看不出多层次观察性的原因,所以我在这里把它扁平化了。

val lastName = object: ObservableField<String>() {
        override fun set(value: String) {
            super.set(value.capitalize())
        }
    }

如果你有什么原因需要分层,你可以改成覆盖 setValue 方法的MutableLiveData。

val lastName = ObservableField(object: MutableLiveData<String>() {
        override fun setValue(value: String) {
            super.setValue(value.capitalize())
        }
    })

但是这个多层在我看来是很复杂的。我不明白如果LiveData实例可以被覆盖,你如何可靠地订阅底层数据。

© www.soinside.com 2019 - 2024. All rights reserved.