How to handle EditText Change Listener in android

Imagine that I have 5 EditText, and I need to fill in the values ​​when a single edittext value has changed. Values ​​are interdependent. For this, I use the following logic.

//Finding which edit text is originating values for(int i=0;i<mEditTextIds.length;i++){ txt[i]=(EditText) findViewById(mEditTextIds[i]); txt[i].setOnTouchListener(new EditTextTouchLisner()); txt[i].setId(i); } //Enable that Edittext TextChangeListner and disabling all other Edittext TextChangeListner .. if (event.getAction() == MotionEvent.ACTION_DOWN){ for(int i=0;i<mTableRowIds.length;i++){ if(i!=v.getId()){ txt[i].addTextChangedListener(null); } } txt[v.getId()].addTextChangedListener(new TextChangedListner()); //calculating values @Override public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) { //calculate(); Toast.makeText(getApplicationContext(), "CHANGED", Toast.LENGTH_SHORT) .show(); } 

But if I click edittext a second time, I get the following errors:

 10-25 16:23:05.149: ERROR/AndroidRuntime(2378): FATAL EXCEPTION: main 10-25 16:23:05.149: ERROR/AndroidRuntime(2378): java.lang.NullPointerException 10-25 16:23:05.149: ERROR/AndroidRuntime(2378): at android.widget.TextView.sendBeforeTextChanged(TextView.java:6116) 10-25 16:23:05.149: ERROR/AndroidRuntime(2378): at android.widget.TextView.access$700(TextView.java:187) 10-25 16:23:05.149: ERROR/AndroidRuntime(2378): at android.widget.TextView$ChangeWatcher.beforeTextChanged(TextView.java:6309) 10-25 16:23:05.149: ERROR/AndroidRuntime(2378): at android.text.SpannableStringBuilder.sendTextWillChange(SpannableStringBuilder.java:878) 10-25 16:23:05.149: ERROR/AndroidRuntime(2378): at android.text.SpannableStringBuilder.change(SpannableStringBuilder.java:279) 10-25 16:23:05.149: ERROR/AndroidRuntime(2378): at android.text.SpannableStringBuilder.change(SpannableStringBuilder.java:269) 10-25 16:23:05.149: ERROR/AndroidRuntime(2378): at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:432) 10-25 16:23:05.149: ERROR/AndroidRuntime(2378): at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:409) 10-25 16:23:05.149: ERROR/AndroidRuntime(2378): at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:28) 10-25 16:23:05.149: ERROR/AndroidRuntime(2378): at android.view.inputmethod.BaseInputConnection.replaceText(BaseInputConnection.java:583) 10-25 16:23:05.149: ERROR/AndroidRuntime(2378): at android.view.inputmethod.BaseInputConnection.setComposingText(BaseInputConnection.java:384) 10-25 16:23:05.149: ERROR/AndroidRuntime(2378): at com.android.internal.view.IInputConnectionWrapper.executeMessage(IInputConnectionWrapper.java:292) 10-25 16:23:05.149: ERROR/AndroidRuntime(2378): at com.android.internal.view.IInputConnectionWrapper$MyHandler.handleMessage(IInputConnectionWrapper.java:73) 10-25 16:23:05.149: ERROR/AndroidRuntime(2378): at android.os.Handler.dispatchMessage(Handler.java:99) 10-25 16:23:05.149: ERROR/AndroidRuntime(2378): at android.os.Looper.loop(Looper.java:123) 10-25 16:23:05.149: ERROR/AndroidRuntime(2378): at android.app.ActivityThread.main(ActivityThread.java:4627) 10-25 16:23:05.149: ERROR/AndroidRuntime(2378): at java.lang.reflect.Method.invokeNative(Native Method) 10-25 16:23:05.149: ERROR/AndroidRuntime(2378): at java.lang.reflect.Method.invoke(Method.java:521) 10-25 16:23:05.149: ERROR/AndroidRuntime(2378): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 10-25 16:23:05.149: ERROR/AndroidRuntime(2378): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 10-25 16:23:05.149: ERROR/AndroidRuntime(2378): at dalvik.system.NativeStart.main(Native Method) 
+7
source share
4 answers

To remove Textchangelistener

TXT [i] .removeTextChangedListener (observer);

0
source

Instead of implementing EditTextTouchLisner you can implement addTextChangedListener in your EditText.

addTextChangedListener takes a TextWatcher object as an argument

Here is Help with TextWatcher

+15
source

How about saving an EditText with focus and inside the change listener only performs the operation if the view that generated the change event is the same as the one who received the focus?

By doing this, there is no need to attach, disconnect, and reconnect the listener.

Only my 2 cents ...

0
source

I had the same problem, but in my case there was another reason:

I added textChangedListener to my EditText before initializing TextChangedListener

so I had this:

 filterText.addTextChangedListener(filterTextWatcher); filterTextWatcher = new NavigationTextWatcher(adapter); setListAdapter(adapter); 

instead:

 filterTextWatcher = new NavigationTextWatcher(adapter); filterText.addTextChangedListener(filterTextWatcher); setListAdapter(adapter); 
0
source

All Articles