2017-11-07 10 views
0

3 개의 편집 텍스트가 서로 종속되어 있습니다. 설명해 드리겠습니다 :
사용자가 edittext1에 값을 입력하면 edittext2 및 edittext3의 값이 계산됩니다.
edittext2 및 edittext3에서도 마찬가지입니다.
즉, 한 가지 유형의 데이터를 가진 사용자는 다른 두 가지 유형의 데이터를 계산할 수 있습니다.
그러나 완벽하지는 않습니다. 데이터 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

네 말이 맞아. 귀하의 답변 주셔서 감사합니다! –