考虑以下情况:
View
CheckBox
和EditText
个。{
View
可以Observables
使用fun observeUsername(): InitialValueObservable<CharSequence> = RxTextView.textChanges(et_username)
来访问EditText
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
的{{1}}中调用,一切都按预期工作。
现在问题:
我在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
我无法弄清楚为什么这个奇怪的事情只发生在EditText
而不是{{1}}。这非常令人困惑......
我非常感谢任何帮助,因为我目前仍然坚持这一点:(
谢谢!