2016-11-24 73 views
1

我想在用户名和密码足够长时使用RxJava2启用登录按钮,但出现错误。在JDK8上使用RxJava2在Android上启用登录按钮

final Button loginButton = (Button) view.findViewById(R.id.loginbutton); 
final TextView usernameField = (TextView) view.findViewById(R.id.username_logindialog); 

Observable<Boolean> userNameValid = RxTextView.textChangeEvents(usernameField) 
     .map(e -> e.text()) 
     .map(inputText -> inputText.length() > 4); 

final TextView passwordField = (TextView) view.findViewById(R.id.password_logindialog); 
Observable<Boolean> passwordValid = RxTextView.textChangeEvents(passwordField) 
     .map(e -> e.text()) 
     .map(inputText -> inputText.length() > 7); 

Observable<Boolean> registerEnabled = 
     Observable.combineLatest(userNameValid, passwordValid, (a,b) -> a && b); 
registerEnabled.registerObserver(enabled -> loginButton.setEnabled(enabled)); 

对于这两个部分在那里你看到map(inputText这样的错误:

enter image description here

并为a && b误差

enter image description here

还有其他的错误,但我认为,前两个错误是根本原因,但我不明白我在说什么现在使用的不是Observable.combineLatest

回答

1

您可以使用此

emailChangeObservable = RxTextView.textChangeEvents(email); 
passwordChangeObservable = RxTextView.textChangeEvents(password); 

// force-disable the button 
submitButton.setEnabled(false); 

Observable.combineLatest(emailChangeObservable, passwordChangeObservable, 
             (emailObservable, passwordObservable) -> { 
    boolean emailCheck = emailObservable.text().length() >= 3; 
    boolean passwordCheck = passwordObservable.text().length() >= 3; 
    return emailCheck && passwordCheck; 
}).subscribe(aBoolean -> { 
    submitButton.setEnabled(aBoolean); 
}); 

// submit button will only be clickable if both forms have more than 3 characters each 

Check here for source

+0

谢谢。我只需要把rx.Observable.combineLatest和它编译。 –

相关问题