1

私は RxBinding と、それを単純なフォームに適用する方法に慣れようとしていました。チェックを実行してモデルを更新する 1 つの Action1 を作成する方法があるかどうか疑問に思っていました。私が十分に明確でない場合は、以下のコードが私の意味を理解するのに役立つことを願っています.

    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);

モデルの状態を確認し、ボタンの色を変更することを担当する Action1 を作成し、Observable の数に等しいサブスクリプションを作成し、それをパラメーターとして渡しました。
たとえば、このようなもの

    Action1<CharSequence> lengthCheck = new Action1<CharSequence>() {
        @Override
        public void call(CharSequence charSequence) {
            if(field is name){
                if(charSequence.length() > 5)
                    ...                    
            }
                ...
        }
    };

だから私の質問は、長さをチェックする Action1 でこれに似たものを成功させる方法はありますか? このような小切手を入れるのは正しい場所ですか?まったく同じコードを持っていて、最小限の変更で 3 回コピー アンド ペーストしたのはばかげているように思えます。
お時間をいただきありがとうございます。

4

1 に答える 1