鉴于以下情况:
AView具有 aCheckBox和多个EditTexts提供使用Jake Wharton 的 RxBinding
的访问权限,如下所示ViewObservables
fun observeUsername(): InitialValueObservable<CharSequence> = RxTextView.textChanges(et_username)
对于EditTexts(其中三个,用于用户名、密码和电子邮件)和
fun observeSignUpCheckBox(): InitialValueObservable<Boolean> = RxCompoundButton.checkedChanges(cb_sign_up)
为了CheckBox
其Presenter特点是一种方法,EditText它很简单
fun observeUsernameText(): Disposable {
return view.observeUsernameText()
.skipInitialValue()
.map { username -> StringUtils.isValidUsername(username.toString()) }
.subscribe({ view.setValidUsername(it) })
}
和一种方法CheckBox:
fun observeSignUpCheckBox(): Disposable {
return view.observeSignUpCheckBox()
.subscribe({ checked ->
Timber.d("### view trigger")
})
}
所有这些方法都被调用,onCreate一切Presenter都按预期工作。
现在的问题:我在验证用户输入
的新函数中添加了一个:Presenter
fun observeInputFields(): Disposable {
val email = view.observeEmailText().map { email -> StringUtils.isValidEmail(email.toString()) }
val password = view.observePasswordText().map { password -> StringUtils.isValidPassword(password.toString()) }
val signUp = view.observeSignUpCheckBox()
val username = view.observeUsernameText().map { username -> StringUtils.isValidUsername(username.toString()) }
return Observable.combineLatest(email, password, signUp, username,
Function4<Boolean, Boolean, Boolean, Boolean, Boolean> { validEmail, validPassword, signUpChecked, validUsername ->
validEmail && validPassword && (!signUpChecked || signUpChecked && validUsername)
})
.subscribe({ validForm ->
Timber.d("### form trigger")
view.enableContinue(validForm)
})
}
每当我更改EditText两者的内容Subscriptions(用于 的内容EditText和添加的组合内容observeInputFields)时,都会按预期接收事件。
但是,如果我点击CheckBox 最后一个Subscription接收事件,具体取决于onCreate.
fun onCreate() {
// here the logs only show '### form trigger'
disposables.add(observeSignUpCheckBox())
disposables.add(observeInputFields())
// ... omitted for clarity
}
或者
fun onCreate() {
// here the logs only show '### view trigger'
disposables.add(observeInputFields())
disposables.add(observeSignUpCheckBox())
// ... omitted for clarity
}
我不明白为什么这种奇怪的事情只发生CheckBox在 s 而不是EditTexts。这非常令人困惑......
非常感谢任何帮助,因为我目前陷入困境:(
谢谢!