Android On Text Change Listener


Answer :

You can add a check to only clear when the text in the field is not empty (i.e when the length is different than 0).

field1.addTextChangedListener(new TextWatcher() {     @Override    public void afterTextChanged(Editable s) {}     @Override        public void beforeTextChanged(CharSequence s, int start,      int count, int after) {    }     @Override        public void onTextChanged(CharSequence s, int start,      int before, int count) {       if(s.length() != 0)         field2.setText("");    }   });  field2.addTextChangedListener(new TextWatcher() {     @Override    public void afterTextChanged(Editable s) {}     @Override    public void beforeTextChanged(CharSequence s, int start,      int count, int after) {    }     @Override    public void onTextChanged(CharSequence s, int start,      int before, int count) {       if(s.length() != 0)          field1.setText("");    }   }); 

Documentation for TextWatcher here.

Also please respect naming conventions.


I know this is old but someone might come across this again someday.

I had a similar problem where I would call setText on a EditText and onTextChanged would be called when I didn't want it to. My first solution was to write some code after calling setText() to undo the damage done by the listener. But that wasn't very elegant. After doing some research and testing I discovered that using getText().clear() clears the text in much the same way as setText(""), but since it isn't setting the text the listener isn't called, so that solved my problem. I switched all my setText("") calls to getText().clear() and I didn't need the bandages anymore, so maybe that will solve your problem too.

Try this:

Field1 = (EditText)findViewById(R.id.field1); Field2 = (EditText)findViewById(R.id.field2);  Field1.addTextChangedListener(new TextWatcher() {     public void afterTextChanged(Editable s) {}     public void beforeTextChanged(CharSequence s, int start,      int count, int after) {    }     public void onTextChanged(CharSequence s, int start,      int before, int count) {       Field2.getText().clear();    }   });  Field2.addTextChangedListener(new TextWatcher() {     public void afterTextChanged(Editable s) {}     public void beforeTextChanged(CharSequence s, int start,      int count, int after) {    }     public void onTextChanged(CharSequence s, int start,      int before, int count) {      Field1.getText().clear();    }   }); 

In Kotlin simply use KTX extension function: (It uses TextWatcher)

yourEditText.doOnTextChanged { text, start, count, after ->          // action which will be invoked when the text is changing     } 


import core-KTX:

implementation "androidx.core:core-ktx:1.2.0" 

Comments

Popular posts from this blog

Converting A String To Int In Groovy

"Cannot Create Cache Directory /home//.composer/cache/repo/https---packagist.org/, Or Directory Is Not Writable. Proceeding Without Cache"

Android How Can I Convert A String To A Editable