首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EditText addTextChangedListener环路

EditText addTextChangedListener环路
EN

Stack Overflow用户
提问于 2016-04-14 11:20:22
回答 1查看 1.3K关注 0票数 0

我有两个编辑文本,每个文本都有文本观察器,当第一个编辑文本被更改时,它会改变第二个编辑文本,看起来代码创建了一个循环,我可以做些什么来让文本观察者只听用户的输入,而不是通过代码改变文本呢?

代码语言:javascript
复制
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)));
        }
    });
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-14 11:57:28

您可以在TextWatcher上保留一个引用,以便在需要时在操作之前删除它们,然后再将它们放回。

代码语言:javascript
复制
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);
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36621543

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档