Reactive Dependent EditText

时间:2017-11-07 12:31:49

标签: android rx-java rx-android rx-java2

我有3个编辑文本相互依赖。让我解释一下:
当用户在edittext1中输入值时,它会计算edittext2和edittext3的值 edittext2和edittext3也是如此 也就是说,具有一种数据类型的用户可以计算另外两种类型的数据 但是,它并不完美,我的意思是,使用数据1,您可以使用结果X计算数据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,并尝试简化,但我想不出办法做到这一点。有人有任何想法吗?

1 个答案:

答案 0 :(得分: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()));
});

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