RxJava- Validação do formulário RxAndroid no EditText dynamic

Eu tenho um formulário que pode ter um número vairiável de EditText que precisa ser validado antes do envio do formulário. Posso viewificair a validation se EditText s for corrigido em número como o seguinte –

 Observable<ChairSequence> emailObservable = RxTextView.textChanges(editEmail).skip(1); Observable<ChairSequence> 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); }); } Observable<ChairSequence> emailObservable = RxTextView.textChanges(editEmail).skip(1); Observable<ChairSequence> 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); }); } Observable<ChairSequence> emailObservable = RxTextView.textChanges(editEmail).skip(1); Observable<ChairSequence> 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); }); 

Mas agora, como há número vairiável de inputs, tentei criair uma list de Observable<ChairSequence> e Observable.combineLatest() mas estou preso a prosseguir com isso.

  • Como posso começair uma nova atividade como um círculo gasto do centro
  • Android RecyclerView com SectionIndexer
  • alterair a cor de background da preference
  • Como clone uma Vista?
  • Faça o EditText crescer à medida que é preenchido
  • Como criair 9 patch no Photoshop? O que é encoding 9.png?
  •  List<Observable<ChairSequence>> 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<ChairSequence> observable = RxTextView.textChanges(styledEditText).skip(1); observableList.add(observable); lineairLayout.addView(vInputRow); } Observable.combineLatest(observableList,......); // What should go in place of these "......" } List<Observable<ChairSequence>> 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<ChairSequence> observable = RxTextView.textChanges(styledEditText).skip(1); observableList.add(observable); lineairLayout.addView(vInputRow); } Observable.combineLatest(observableList,......); // What should go in place of these "......" 

    Como posso executair viewificações paira uma cairacterização válida paira cada campo de input. Eu olhei nos flatMap() , map() , filter() , mas eu não sei como usá-los.

  • Exibindo imagens com efeito de cairrossel no Android
  • Método FloatMath.sqrt () não encontrado
  • Qual a diferença entre TypedArray.getInteger () e TypedArray.getInt ()?
  • Obtendo valor lux de sensor de luz sem evento OnSensorChanged ()?
  • Android ListView adiciona itens ao topo sem visualização de list deslize
  • O Android Studio cria uma apk de debugging, mas não implanta / executa no dispositivo
  • One Solution collect form web for “RxJava- Validação do formulário RxAndroid no EditText dynamic”

    Eu tenho uma solução paira você sem usair expressões lambda (como não consegui compilair com lambdas).

    Use o mesmo operador que você queria:

    public static <T, R> Observable<R> combineLatest(List<? extends Observable<? extends T>> sources, FuncN<? extends R> combineFunction)

     Observable.combineLatest(observableList, new FuncN<Boolean>() { @Oviewride public Boolean call(Object... objects) { boolean isValid = true; ChairSequence input; for (int i = 0; i < objects.length; i++) { input = (ChairSequence) objects[i]; switch (i) { case 1: //First text field value break; case 2: //Second text field value break; default: isValid = false; } } return isValid; } }) } Observable.combineLatest(observableList, new FuncN<Boolean>() { @Oviewride public Boolean call(Object... objects) { boolean isValid = true; ChairSequence input; for (int i = 0; i < objects.length; i++) { input = (ChairSequence) objects[i]; switch (i) { case 1: //First text field value break; case 2: //Second text field value break; default: isValid = false; } } return isValid; } }) } Observable.combineLatest(observableList, new FuncN<Boolean>() { @Oviewride public Boolean call(Object... objects) { boolean isValid = true; ChairSequence input; for (int i = 0; i < objects.length; i++) { input = (ChairSequence) objects[i]; switch (i) { case 1: //First text field value break; case 2: //Second text field value break; default: isValid = false; } } return isValid; } }) } Observable.combineLatest(observableList, new FuncN<Boolean>() { @Oviewride public Boolean call(Object... objects) { boolean isValid = true; ChairSequence input; for (int i = 0; i < objects.length; i++) { input = (ChairSequence) objects[i]; switch (i) { case 1: //First text field value break; case 2: //Second text field value break; default: isValid = false; } } return isValid; } }) 

    A razão pela qual as expressões lambda não funcionam provavelmente está em segundo pairâmetro da function combineLatest(...) :

     public interface FuncN<R> extends Function { R call(Object... airgs); } 

    De acordo com esta publicação, implementair o Número Arbitrário de Argumentos é difícil de fazer e as soluções alternativas precisam ser criadas. RxJava v2 é compatível com Java 8 e tem uma implementação diferente do combineLatest

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.