首页 > 解决方案 > EditText On update/onChange value 添加监听器

问题描述

我的活动中有 2 个 EditText,比如说editText1editText2和一个双变量d=200

我希望当用户更改/插入值时editText1editText2值将实时更新为editText1*d

此外,当用户更改/插入 editText2 的值时,editText1 将实时更新为editText2*d

我尝试使用addTextChangedListener->onTextChanged但它适用于一个编辑文本,当我为两个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) {

                            Editable a = et1.getText();
                            Double aa = Double.parseDouble(a.toString())*100;
                            String aaa = aa.toString();

                            et2.setText(aaa);

                        }

                        @Override
                        public void afterTextChanged(Editable s) {

                        }
                    });

                    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) {

                            Editable b=et2.getText();
                            Double bb=Double.parseDouble(b.toString());
                            String bbb=bb.toString();
                            et1.setText(bbb);


                        }

                        @Override
                        public void afterTextChanged(Editable s) {

                        }
                    });

标签: javaandroid

解决方案


编辑文本 et1, et2;

TextWatcher watcher1 = new TextWatcher() {

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        // TODO Auto-generated method stub
        Editable a = et1.getText();
        Double aa = Double.parseDouble(a.toString())*100;
        String aaa = aa.toString();
        et2.removeTextChangedListener(watcher2);
        et2.setText(aaa);
        et2.addTextChangedListener(watcher2);
    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count,
            int after) {
        // TODO Auto-generated method stub

    }

    @Override
    public void afterTextChanged(Editable s) {
        // TODO Auto-generated method stub

    }
};

TextWatcher watcher2 = new TextWatcher() {

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        // TODO Auto-generated method stub
        Editable b=et2.getText();
        Double bb=Double.parseDouble(b.toString());
        String bbb=bb.toString();
        et1.removeTextChangedListener(watcher1);
        et1.setText(bbb);
        et1.addTextChangedListener(watcher1);
    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count,
            int after) {
        // TODO Auto-generated method stub

    }

    @Override
    public void afterTextChanged(Editable s) {
        // TODO Auto-generated method stub

    }
};
et1.addTextChangedListener(watcher1);
et2.addTextChangedListener(watcher2);

推荐阅读