未在RxObservable上调用观察者

问题描述

尝试使用RxJava和RxBinding在Android中进行简单表单屏幕显示。我有一个Button(默认情况下处于禁用状态)和几个editTexts。

这样的想法是,只有在所有编辑文本均已填满的情况下,观察每个编辑文本中的文本变化并启用按钮。

方法:

  1. 我为struct YearOfBirth: Codable { let year : Int? init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() if let integerValue = try? container.decode(Int.self) { year = integerValue } else if let stringValue = try? container.decode(String.self) { year = Int(stringValue) } else { throw DecodingError.typeMismatch(YearOfBirth.self,DecodingError.Context(codingPath: decoder.codingPath,debugDescription: "Wrong type for YearOfBirth")) } } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() try container.encode(year) } } 上的每个EditText的onTextChange创建了一个可观察对象,这两个可观察对象都是活动的属性
onCreate()
  1. 现在,要验证EditText,我又创建了两个可观察对象,并使用moiValueObservable = binding.tietMoiValue .textChanges() .skipInitialValue() .map { it.toString() } moiDescObservable = binding.tietMoiDesc .textChanges() .skipInitialValue() .map { it.toString() } 运算符进行验证(同样,可观察对象是类成员)
combineLatest()
  1. 现在要启用“提交”按钮,我已经完成了
validMoiValueObservable = moiValueObservable.map { !it.isNullOrEmpty() }
validMoiDescObservable = moiDescObservable.map { !it.isNullOrEmpty() }
  1. 从edittext获取最新的文本输入(在OnCreate中的某些位置)
Observable.combineLatest<Boolean,Boolean,Boolean>(
            validMoiValueObservable,validMoiDescObservable,BiFunction { t1,t2 ->
                return@BiFunction (t1 && t2)
            }
        ).distinctUntilChanged()
            .subscribe {
                binding.btnSubmit.enabled = it
            }
  1. 可观察到的提交按钮如下添加
moiValueObservable.subscribe { this.moiValue = it }
moiDescObservable.subscribe { this.moiDesc = it }

问题: 我面临的问题是,提交按钮永远不会启用。任何帮助深表感谢。有人可以指出此代码中的错误吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)