我有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,并尝试简化,但我想不出办法做到这一点。有人有任何想法吗?
答案 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()));
});
有很多方法可以删除重复的代码,但我不确定它是否值得。