1

RxJava2 を使用して、ユーザー名とパスワードが十分に長い場合にログイン ボタンを有効にしたいのですが、エラーが発生します。

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のエラーが表示されます。

ここに画像の説明を入力

そして、エラーa && b

ここに画像の説明を入力

他にもエラーがありますが、最初の 2 つのエラーが根本的な原因だと思いますが、Observable.combineLatest今の代わりに何を使用すべきかわかりません。

4

1 に答える 1

3

これを使用できます

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

ソースの確認はこちら

于 2016-11-24T09:00:53.000 に答える