android - 如何改变 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())
}
}
如果出于某种原因需要分层,则可以改写setValue
MutableLiveData 的方法。
val lastName = ObservableField(object: MutableLiveData<String>() {
override fun setValue(value: String) {
super.setValue(value.capitalize())
}
})
但是这种多层结构让我很费解。如果可以覆盖 LiveData 实例,我看不出如何可靠地订阅基础数据。
推荐阅读
- javascript - React:如何从具有动态高度的子项中获取元素的参考高度?
- python - Kivy:自定义按钮不随 self.state 更改而更新
- react-native - 令人困惑的 React Native 语法
- ios - `user_version 的 SQLite 文档中的“偏移 60 处的整数”是什么意思?语用`
- google-sheets - 如何在谷歌表格中创建质量分数
- javascript - 使用钩子测试有状态的 React 组件时出现意外结果?(笑话)
- javascript - 如何在仅具有“子”数组的一个标识属性的数组中查找对象的 ID
- python - 索引错误;列表索引超出范围。列表有项目,0 超出范围
- c# - Pomelo 中的 UseMySql 抛出异常
- html - HTML/CSS 下拉菜单未覆盖或显示在块中