如何改变 observableField 中的传入字符串
How to mutate an incoming string in an observableField
我将以下字段绑定到 editText。
val lastName = ObservableField(MutableLiveData<String>())
我想改变输入的字符串,以便第一个字母自动设置为大写。
所以如果你输入
williams -> Williams
我想我可以通过如下方式解决这个问题
lastName.getObservable()
.subscribe { input ->
val lastname = input.decapitalize()
lastName.getField().postValue(lastname.capitalize())
}
我注意到这样做会使我陷入一个永恒的循环,因为后值每次都会触发订阅。我怎样才能通过 RxJava 改变传入的字符串,而不必像我现在那样做?
您可以通过覆盖 set
在源代码中执行此操作。看不出多层可观察性的原因,所以我在这里扁平化了。
val lastName = object: ObservableField<String>() {
override fun set(value: String) {
super.set(value.capitalize())
}
}
如果出于某种原因需要分层,您可以改写 MutableLiveData 的 setValue
方法。
val lastName = ObservableField(object: MutableLiveData<String>() {
override fun setValue(value: String) {
super.setValue(value.capitalize())
}
})
但是我觉得这种多层结构很复杂。如果可以覆盖 LiveData 实例,我看不出如何可靠地订阅基础数据。
我将以下字段绑定到 editText。
val lastName = ObservableField(MutableLiveData<String>())
我想改变输入的字符串,以便第一个字母自动设置为大写。
所以如果你输入
williams -> Williams
我想我可以通过如下方式解决这个问题
lastName.getObservable()
.subscribe { input ->
val lastname = input.decapitalize()
lastName.getField().postValue(lastname.capitalize())
}
我注意到这样做会使我陷入一个永恒的循环,因为后值每次都会触发订阅。我怎样才能通过 RxJava 改变传入的字符串,而不必像我现在那样做?
您可以通过覆盖 set
在源代码中执行此操作。看不出多层可观察性的原因,所以我在这里扁平化了。
val lastName = object: ObservableField<String>() {
override fun set(value: String) {
super.set(value.capitalize())
}
}
如果出于某种原因需要分层,您可以改写 MutableLiveData 的 setValue
方法。
val lastName = ObservableField(object: MutableLiveData<String>() {
override fun setValue(value: String) {
super.setValue(value.capitalize())
}
})
但是我觉得这种多层结构很复杂。如果可以覆盖 LiveData 实例,我看不出如何可靠地订阅基础数据。