EditText中addTextChangedListener遇到的坑

1.给一个EditText添加了TextWatcher监听,会执行多次afterTextChanged方法

    machineNoEt.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) {
                      
                    }
                });

问题描述:

1.每次afterTextChanged 都会执行两次,

2.失去焦点时还会执行addTextChangedListener里面的三个方法

分析原因:

在代码中有的地方执行了 

machineNoEt.setText("xxxx");

导致afterTextChanged会执行一次

解决办法:

加一个标志位

private boolean listenForChanges = true;//是否允许监听

在设置setText前后加上标志位

   listenForChanges = false;
   trackBinding.machineNoEt.setText(machineNo);
   listenForChanges = true;

在addTextChangedListener监听里需要控制的地方加上控制就行了

    machineNoEt.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) {
                        if (listenForChanges) {
                            //执行你想要执行的代码
                        }
                    }
                });

你可能感兴趣的:(Android:应用篇,android)