[英]EditText addTextChangedListener loop
I have two Edit Texts, each one have text watcher that change the second edittext text when the first edittext text is changed, it seems the code create a loop, is there something i can do to make the text watcher only listen to user input and not by changing the text by code? 我有两个“编辑文本”,每个都有一个文本监视程序,当第一个edittext文本更改时,它会更改第二个edittext文本,似乎代码创建了一个循环,有什么我可以做的事情,使文本监视程序仅侦听用户输入并不是通过代码更改文本?
et1.addTextChangedListener(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) {
double x = Double.valueOf(et1.getText().toString());
et2.setText(String.valueOf((x*2)));
}
});
et2.addTextChangedListener(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) {
double x = Double.valueOf(et2.getText().toString());
et1.setText(String.valueOf((x/2)));
}
});
You can keep a reference on the TextWatcher
to remove them when needed before an operation and later put them back. 您可以在TextWatcher
上保留引用,以便在需要进行操作之前将其删除,然后再放回去。
private TextWatcher tv1;
private TextWatcher tv2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final EditText et1 = (EditText) findViewById(R.id.editText);
final EditText et2 = (EditText) findViewById(R.id.editText1);
tv1 = 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) {
double x = Double.valueOf(et1.getText().toString());
et2.removeTextChangedListener(tv2); // "disable" the watcher
et2.setText(String.valueOf((x*2)));
et2.addTextChangedListener(tv2); // "enable" the watcher
}
};
tv2 = 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) {
double x = Double.valueOf(et2.getText().toString());
et1.removeTextChangedListener(tv1); // "disable" the watcher
et1.setText(String.valueOf((x/2)));
et1.addTextChangedListener(tv1); // "enable" the watcher
}
};
et1.addTextChangedListener(tv1);
et2.addTextChangedListener(tv2);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.