我有以下字段绑定到editText。
val lastName = ObservableField(MutableLiveData<String>())
我想突变输入的字符串,使第一个字母自动设置为大写。
因此,如果你输入
williams -> Williams
我想我可以通过以下方式解决这个问题
lastName.getObservable()
.subscribe { input ->
val lastname = input.decapitalize()
lastName.getField().postValue(lastname.capitalize())
}
我注意到这样做,会让我陷入一个永恒的循环,因为postvalue每次都会触发订阅。我如何通过RxJava突变传入的字符串,而不需要用我现在的方式来做?
你可以在源码中通过重写 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实例可以被覆盖,你如何可靠地订阅底层数据。