Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/219.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java EditText addTextChangedListener循环_Java_Android - Fatal编程技术网

Java EditText addTextChangedListener循环

Java EditText addTextChangedListener循环,java,android,Java,Android,我有两个编辑文本,每一个都有文本观察者,当第一个编辑文本被更改时,它们会更改第二个编辑文本,代码似乎会创建一个循环,我能做些什么让文本观察者只听用户输入,而不是通过代码更改文本 et1.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) {

我有两个编辑文本,每一个都有文本观察者,当第一个编辑文本被更改时,它们会更改第二个编辑文本,代码似乎会创建一个循环,我能做些什么让文本观察者只听用户输入,而不是通过代码更改文本

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)));
        }
    });

您可以在
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);
}

您可以在
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);
}

您可以使用
FocusChangeListener()
进行此
public void-afterTextChanged(可编辑的s){if(!mIsCalledFromWatcher){mIsCalledFromWatcher=true;/*执行操作*/mIsCalledFromWatcher=false;}
。。。看看发生了什么。。。setText正在引发另一个PostTextChanged调用您已经构建了一个无休止的循环,您可以使用
FocusChangeListener()
用于此
public void PostTextChanged(可编辑的s){if(!mIsCalledFromWatcher){mIsCalledFromWatcher=true;/*执行操作*/mIsCalledFromWatcher=false;}
。。。看看发生了什么。。。setText正在导致另一个PostTextChanged调用您构建了一个无休止的循环