响应式依赖 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()));
});
删除重复代码的方法有很多,但我不确定是否值得。
我有 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()));
});
删除重复代码的方法有很多,但我不确定是否值得。