Mam formularz, który może mieć zmienną liczbę EditText
, który musi zostać sprawdzony przed przesłaniem formularza. Mogę wykonać sprawdzanie poprawności, jeśli EditText
s są ustalone w liczbie jak po -RxJava-RxAndroid formularz sprawdzania poprawności dynamicznej EditText
Observable<CharSequence> emailObservable = RxTextView.textChanges(editEmail).skip(1);
Observable<CharSequence> passwordObservable = RxTextView.textChanges(editPassword).skip(1);
mFormValidationSubscription = Observable.combineLatest(emailObservable, passwordObservable,
(newEmail, newPassword) -> {
boolean emailValid = !TextUtils.isEmpty(newEmail) && android.util.Patterns.EMAIL_ADDRESS.matcher(newEmail).matches();
if(!emailValid) {
emailInputLayout.setError(getString(R.string.error_invalid_email));
emailInputLayout.setErrorEnabled(true);
}else {
emailInputLayout.setError(null);
emailInputLayout.setErrorEnabled(false);
}
boolean passValid = !TextUtils.isEmpty(newPassword) && newPassword.length() > 4;
if (!passValid) {
passwordInputLayout.setError(getString(R.string.error_invalid_password));
passwordInputLayout.setErrorEnabled(true);
} else {
passwordInputLayout.setError(null);
passwordInputLayout.setErrorEnabled(true);
}
return emailValid && passValid;
}).subscribe(isValid ->{
mSubmitButton.setEnabled(isValid);
});
Ale teraz jak istnieje zmienna liczba wejść próbowałem tworzenie listy Observable<CharSequence>
i Observable.combineLatest()
ale utknąłem jak postępować z tym .
List<Observable<CharSequence>> observableList = new ArrayList<>();
for(InputRule inputRule : mMaterial.getRules()) {
View vInputRow = inflater.inflate(R.layout.item_material_input_row, null, false);
StyledEditText styledEditText = ((StyledEditText)vInputRow.findViewById(R.id.edit_input));
styledEditText.setHint(inputRule.getName());
Observable<CharSequence> observable = RxTextView.textChanges(styledEditText).skip(1);
observableList.add(observable);
linearLayout.addView(vInputRow);
}
Observable.combineLatest(observableList,......); // What should go in place of these "......"
Jak mogę przeprowadzić kontrole na ważnej charsequence dla każdego pola wejściowego. Spojrzałem na metody flatMap()
, map()
, filter()
, ale nie wiem, jak z nich korzystać.
Można to zrobić za pomocą poprzez zapisanie każdego z zaobserwować, że chcesz. Zwróciłby ci sekwencję znaków i mapując operatora funkcji, mógłbyś sprawdzić poprawność danych wejściowych. Daj mi znać, jeśli nie możesz tego zrozumieć. –
Czy to było pomocne? –