Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.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 焦点丢失时移除ExtChangedListener_Java_Android - Fatal编程技术网

Java 焦点丢失时移除ExtChangedListener

Java 焦点丢失时移除ExtChangedListener,java,android,Java,Android,我在方法内部的EditText中调用onFocusChange方法,当该字段具有焦点时,我使用先前声明的TextWatcher调用addTextChangedListener到同一字段。 当字段失去焦点时,我移除TextWatcher。 但它看起来不起作用,因为在第二个字段中,我最终需要将文本设置为第一个字段,最后调用我之前删除的TextWatcher et1.setOnFocusChangeListener(new View.OnFocusChangeListener() {

我在方法内部的EditText中调用onFocusChange方法,当该字段具有焦点时,我使用先前声明的TextWatcher调用addTextChangedListener到同一字段。 当字段失去焦点时,我移除TextWatcher。 但它看起来不起作用,因为在第二个字段中,我最终需要将文本设置为第一个字段,最后调用我之前删除的TextWatcher

    et1.setOnFocusChangeListener(new View.OnFocusChangeListener() {

        @Override
        public void onFocusChange(View v, boolean hasFocus) {

            final TextWatcher watcher = new TextWatcher() {

                @Override
                public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                    // Do things
                }

                @Override
                public void onTextChanged(CharSequence s, int start, int before, int count) {
                    // Do things
                }

                @Override
                public void afterTextChanged(Editable s) {
                    // Do things
                }
            };

            if (hasFocus) {
                et1.addTextChangedListener(watcher);
            } else {
                et1.removeTextChangedListener(watcher);
            }
        }
然后在这里开始第二个字段的代码(使用类似的逻辑)


这是Android Studio的一个bug,或者我错过了什么?

首先,我建议您不要在
onFocusChange
方法中创建
textWatcher
,因为在调用
onFocusChange
时不断创建它并不重要,
然后我想问你为什么要删除
textWatchers
,因为如果你的
EditText
没有焦点,它是一样的,
textWatcher
将不起作用

你为什么不简单地想
添加textChangedListener
,而不跟踪焦点的变化?我看不出有任何理由去寻找
onfocuschangelister
    et2.setOnFocusChangeListener(new View.OnFocusChangeListener() {

        @Override
        public void onFocusChange(View v, boolean hasFocus) {

            final TextWatcher watcherEt2 = new TextWatcher() {

                @Override
                public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                    // Do things
                }

                @Override
                public void onTextChanged(CharSequence s, int start, int before, int count) {
                    // Do things
                   et1.setText("from things"); //here the removed TextWatcher is runned
                }

                @Override
                public void afterTextChanged(Editable s) {
                    // Do things
                }
            };

            if (hasFocus) {
                et2.addTextChangedListener(watcherEt2);
            } else {
                et2.removeTextChangedListener(watcherEt2);
            }
        }