Search code examples
androidandroid-edittextandroid-textwatcher

On setting Edit Text box text with respect to change in another Edit text and Vice versa in real time changing


I have two entry boxes(Edit Text Box) In android layout, I am trying to set one edit text box's text to another Edit text box's text by calculating some value and Vice versa(getting text from second text box then calculate and add it to first text box) in real time(on current time of typing in edit box), I have seen some of the answers on 'On Text Change Listeners' and tried but might be due to focusing issue of edit boxes it is crashing.


Solution

  • Adding text watcher at the same time may cause a problem (Recurring effect). But you can achieve your requirement by activating text watcher one at a time. While edittext1 text changes we will remove text watcher for edittext2 and we will set edittext2 in onTextChanged of text watcher of edittext1. then we will reactivate text watcher of edittext2 in afterTextChanged text watcher of edittext1. the same logic applies to edittext1.

     public class MainActivity extends AppCompatActivity {
            EditText editText1,editText2,editText3,editText4;
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
                editText1=findViewById(R.id.editText1);
                editText2=findViewById(R.id.editText2);
                editText3=findViewById(R.id.editText3);
                editText4=findViewById(R.id.editText4);
                editText1.addTextChangedListener(textWatcher1);
                editText2.addTextChangedListener(textWatcher2);
                editText3.addTextChangedListener(textWatcher3);
                editText4.addTextChangedListener(textWatcher4);
            }
    
            TextWatcher textWatcher1=new TextWatcher() {
                @Override
                public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                    editText2.removeTextChangedListener(textWatcher2);
                }
    
                @Override
                public void onTextChanged(CharSequence s, int start, int before, int count) {
                    editText2.setText(editText1.getText());
                }
    
                @Override
                public void afterTextChanged(Editable s) {
                    editText2.addTextChangedListener(textWatcher2);
                }
            };
    
            TextWatcher textWatcher2=new TextWatcher() {
                @Override
                public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                    editText1.removeTextChangedListener(textWatcher1);
                }
    
                @Override
                public void onTextChanged(CharSequence s, int start, int before, int count) {
                    editText1.setText(editText2.getText());
                }
    
                @Override
                public void afterTextChanged(Editable s) {
                    editText1.addTextChangedListener(textWatcher1);
                    }
                };
              }
    
    TextWatcher textWatcher3=new TextWatcher() {
                @Override
                public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                    editText4.removeTextChangedListener(textWatcher4);
                }
    
                @Override
                public void onTextChanged(CharSequence s, int start, int before, int count) {
                    editText4.setText(editText3.getText());
                }
    
                @Override
                public void afterTextChanged(Editable s) {
                    editText4.addTextChangedListener(textWatcher4);
                }
            };
    
            TextWatcher textWatcher4=new TextWatcher() {
                @Override
                public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                    editText3.removeTextChangedListener(textWatcher3);
                }
    
                @Override
                public void onTextChanged(CharSequence s, int start, int before, int count) {
                    editText3.setText(editText4.getText());
                }
    
                @Override
                public void afterTextChanged(Editable s) {
                    editText3.addTextChangedListener(textWatcher3);
                    }
                };
              }