Android 反应相关编辑文本

Android 反应相关编辑文本,android,rx-java,rx-android,rx-java2,Android,Rx Java,Rx Android,Rx Java2,我有3个相互依赖的编辑文本。让我解释一下: 当用户在edittext1中输入值时,它会计算edittext2和edittext3的值。 edittext2和edittext3也会发生同样的情况。 也就是说,具有一种数据类型的用户可以计算另外两种类型的数据。 但是,它不是完美的,我的意思是,对于数据1,你可以用结果X计算数据2,但是,在2中,如果你输入X,你会得到相似但不相同的结果 那么, 我对每个编辑文本都这样做: new TextWatcher() { @Overrid

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

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

Nice。为什么你认为删除重复代码的方法不值得呢?灵活性是有代价的。如果你想让事情变得更灵活,你需要创建更多的类、接口和更多的工作。在某些情况下,您真的不想为了不需要的灵活性而花费时间过度复杂化体系结构。所以,如果您想创建一个组件以便重用这个部分,或者您想添加更多的EditText,那么可能是有意义的,否则我认为这就足够了。