响应式依赖 EditText

Reactive Dependent EditText

我有 3 个相互依赖的编辑文本。让我解释一下:
当用户在 edittext1 中输入值时,它会计算 edittext2 和 edittext3 的值。
edittext2 和 edittext3 也是如此。
也就是说,拥有一种数据的用户可以计算出另外两种数据。
但是,它并不完美,我的意思是,对于数据 1,您可以用结果 X 计算数据 2,但是,在数据 2 中,如果您输入 X,您将得到相似但不相同的结果。

嗯, 我对每个编辑文本都这样做:

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 并试图简化它,但我想不出一种方法来做到这一点。有人知道吗?

我认为最好的方法是检查哪些视图具有焦点,以避免事件的循环传播:

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

删除重复代码的方法有很多,但我不确定是否值得。