afterTextChanged() callback being called without the text being actually changed

Edited solution:

As it seems the text was changed from the second time the fragment was attached because the fragment restored the previous state of the views.

My solution was adding the text watcher in the onResume() since the state was restored before the onResume was called.

@Override
public void onResume() {
    super.onResume();
    myEditText.addTextChangedListener(textWatcher);
}

Edit As @MiloszTylenda have mentioned in the comments it is better to remove the Textwatcher in the onPause() callback to avoid leaking the Textwatcher.

@Override public void onPause() {
  super.onPause();
  myEditText.removeTextChangedListener(watcher);
}

It seems that this error comes from the fact that Android SDK will call settext when view is coming alive again to recover the state of the EditText. As you can see from the extract below there is a flag that you can change on the Edittext to bypass this behavior.

    <!-- If false, no state will be saved for this view when it is being
         frozen. The default is true, allowing the view to be saved
         (however it also must have an ID assigned to it for its
         state to be saved).  Setting this to false only disables the
         state for this view, not for its children which may still
         be saved. -->
    <attr name="saveEnabled" format="boolean" />

So by adding android:saveEnabled="false" on your EditText will fix the problem and the setText will not be called when view comes to foreground.

This is what I did and problem was solved.