J'essayais de me familiariser avec RxBinding et comment il pourrait être appliqué sur des formulaires simples. Je me demandais s'il y avait moyen de créer une Action1 qui effectue les contrôles et met à jour le modèle. Si je ne suis pas assez clair, j'espère que le code ci-dessous vous aidera à comprendre ce que je veux dire.Créer un uniforme Action1 pour effectuer des contrôles sur les champs
Observable<CharSequence> nameObservable = RxTextView.textChanges(name).share();
Action1<CharSequence> validateAction;
Observable<CharSequence> surnameObservable = RxTextView.textChanges(surname).share();
Observable<CharSequence> emailObservable = RxTextView.textChanges(mail).share();
validateAction = new Action1<CharSequence>() {
@Override
public void call(CharSequence charSequence) {
if(state.nameState && state.surnameState && state.emailState)
submit.setBackgroundColor(getResources().getColor(R.color.green));
else
submit.setBackgroundColor(getResources().getColor(R.color.blue));
}
};
Subscription nameState = nameObservable
.subscribe(new Action1<CharSequence>() {
@Override
public void call(CharSequence charSequence) {
Log.d("Length","Len : " + charSequence.length());
if(charSequence.length() > 5)
state.nameState = true;
else
state.nameState = false;
}
});
Subscription surnameState = surnameObservable
.subscribe(new Action1<CharSequence>() {
@Override
public void call(CharSequence charSequence) {
Log.d("Length","Len : " + charSequence.length());
if(charSequence.length() > 5)
state.surnameState = true;
else
state.surnameState = false;
}
});
Subscription mailState = emailObservable
.subscribe(new Action1<CharSequence>() {
@Override
public void call(CharSequence charSequence) {
Log.d("Length","Len : " + charSequence.length());
if(charSequence.length() > 5)
state.emailState = true;
else
state.emailState = false;
}
});
Subscription nameValidate = nameObservable.subscribe(validateAction);
Subscription surnameValidate = surnameObservable.subscribe(validateAction);
Subscription mailValidate = emailObservable.subscribe(validateAction);
J'ai créé une action1 dont la responsabilité est de vérifier l'état du modèle et changer la couleur du bouton, créé des souscriptions égal au nombre de Observables et passé comme paramètre.
Quelque chose comme ceci par exemple
Action1<CharSequence> lengthCheck = new Action1<CharSequence>() {
@Override
public void call(CharSequence charSequence) {
if(field is name){
if(charSequence.length() > 5)
...
}
...
}
};
Ma question est, est-il un moyen de réussir quelque chose de semblable à cela pour l'action1 qui vérifient la longueur? Est-ce même le bon endroit pour mettre un chèque comme ça? Il me semble juste stupide que j'ai exactement le même code, copié et collé trois fois avec des changements minimes.
Merci beaucoup pour votre temps.
Vous souhaitez définir le fond du bouton de soumission sur vert lorsque 3 états = true? –
Yeap, assez simple, juste essayer de comprendre la bibliothèque –
utiliser combineLatest pour ce cas –