鉴于以下情况:
AView
具有 aCheckBox
和多个EditText
s提供使用Jake Wharton 的 RxBinding
的访问权限,如下所示View
Observables
fun observeUsername(): InitialValueObservable<CharSequence> = RxTextView.textChanges(et_username)
对于EditText
s(其中三个,用于用户名、密码和电子邮件)和
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 而不是EditText
s。这非常令人困惑......
非常感谢任何帮助,因为我目前陷入困境:(
谢谢!