У меня есть 2 EditText + 2 TextWatcher, один EditText влияет на другой. Я борюсь с этим и понятия не имею, как избежать ошибки StackOverFlow,2 EditText + 2 TextWatcher - ошибка stackoverflow
Почему edit_stezenie_ldl.removeTextChangedListener (watch) недостаточно? Он должен остановить этот TextWatcher.
@Override
public void onFocusChange(View v, boolean hasFocus) {
watch = 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) {
if(edit_stezenie_ldl.getText().toString().length()==0) {
edit_stezenie_ldl2.setText(null);
}
else {
String x = edit_stezenie_ldl.getText().toString();
Double xy = Double.parseDouble(x)/(36.8);
Double rounded = round(xy, 2);
String wynik = rounded.toString();
edit_stezenie_ldl2.setText(wynik);
}
}
@Override
public void afterTextChanged(Editable s) {
}
};
watch2 = 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) {
if(edit_stezenie_ldl2.getText().toString().length()==0) {
edit_stezenie_ldl.setText("");
}
else {
String x = edit_stezenie_ldl2.getText().toString();
Double xy = Double.parseDouble(x)/(36.8);
Double rounded = round(xy, 2);
String wynik = rounded.toString();
edit_stezenie_ldl.setText(wynik);
}
}
@Override
public void afterTextChanged(Editable s) {
}
};
if(v==edit_stezenie_ldl && hasFocus){
edit_stezenie_ldl2.removeTextChangedListener(watch2);
edit_stezenie_ldl.addTextChangedListener(watch);
}
else if(v==edit_stezenie_ldl2 && hasFocus){
edit_stezenie_ldl.removeTextChangedListener(watch);
edit_stezenie_ldl2.addTextChangedListener(watch2);
}
}
О мой бог :) Я пытался создать экземпляр TextWatcher где-то еще, но он не работает по какой-то странной причине, и теперь сделал это снова и отлично работает! Спасибо @ Floern! – klijakub