2017-11-07 14 views
0

私は3つの編集テキストをお互いに依存しています。私に説明させてください:
ユーザがedittext1に値を入力すると、edittext2とedittext3の値が計算されます。
edittext2とedittext3についても同じことが起こります。
つまり、1種類のデータを持つユーザーは、2種類の他の種類のデータを計算できます。
しかし、データ1では、結果2のデータ2を計算できますが、2でXを入力すると、同様の結果が得られます。反応依存のEditText

だけでなく、 私は、各エディットテキストのためにこれをやっていた:

new TextWatcher() { 
      @Override 
      public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
      } 

      @Override 
      public void onTextChanged(CharSequence s, int start, int before, int count) { 
      } 

      @Override 
      public void afterTextChanged(Editable s) { 

       if (isSettingText) { 
        return; 
       } 
       editText1.getText.toString(); 
       calculateData2BasedOn1(); 
       calculateData3BasedOn1(); 
      } 

そして私は、それぞれ2と3のために同じことを行います。
さて、私はそれがたくさんのコードであると思います。
私はRxAndroidを勉強しており、それを単純化しようとしていますが、私はそれを行う方法を考えることはできません。誰もが分かった?

答えて

1

私はイベントの巡回伝播を避けるために、最善の方法は、フォーカスを持っている見解である確認することであると思う:

RxTextView.textChangeEvents(mEditText1) 
    .filter(textViewTextChangeEvent -> mEditText1.hasFocus()) 
    .subscribe(textViewTextChangeEvent -> { 
     updateEditText(mEditText2, calculateText2(textViewTextChangeEvent.text().toString())); 
     updateEditText(mEditText3, calculateText3(textViewTextChangeEvent.text().toString())); 
    }); 

RxTextView.textChangeEvents(mEditText2) 
    .filter(textViewTextChangeEvent -> mEditText2.hasFocus()) 
    .subscribe(textViewTextChangeEvent -> { 
     updateEditText(mEditText1, calculateText1(textViewTextChangeEvent.text().toString())); 
     updateEditText(mEditText3, calculateText3(textViewTextChangeEvent.text().toString())); 
}); 


RxTextView.textChangeEvents(mEditText3) 
    .filter(textViewTextChangeEvent -> mEditText3.hasFocus()) 
    .subscribe(textViewTextChangeEvent -> { 
     updateEditText(mEditText1, calculateText1(textViewTextChangeEvent.text().toString())); 
     updateEditText(mEditText2, calculateText2(textViewTextChangeEvent.text().toString())); 
}); 

を重複コードを削除するための多くの方法がありますが、私はそれがそれに値すると確信していません。

+0

ニース。なぜあなたは重複したコードを削除する方法がそれの価値がないと思うのですか? –

+0

さて、柔軟性にはコストが伴います。物事をより柔軟にしたい場合は、より多くのクラス、インターフェース、さらに多くの作業を作成する必要があります。あなたが本当に必要としない柔軟性のためにアーキテクチャを過度に費やす時間を費やしたくない状況があります。 そのため、この部分を再利用できるようにコンポーネントを作成したい場合や、 'EditText'を追加したい場合は、おそらく理にかなっています。そうでなければ十分です。 – GVillani82

+0

ええ、そうです。ご回答有難うございます! –