androidandroid-fragmentsandroid-activityandroid-edittextandroid-savedstate

How to prevent editText from auto filling text when fragment is restored from saved instance?


I have an activity which holds and shows multiple fragments.

When i re-enter the fragment it auto fills text in all the editTexts. The same text for all fields as well.

Example:

Open fragment and fill in text in the two editTexts:
CustomEditText1: [______]
CustomEditText2: [_acb__]
CustomEditText3: [_qwe__]

Click back button and re-enter the fragment
CustomEditText1: [_qwe__]
CustomEditText2: [_qwe__]
CustomEditText3: [_qwe__]

This is my overwritten methods in the fragment:

public AddBookingFragment() {
    // Required empty public constructor
}

@Override
public void onAttach(Context context) {
    super.onAttach(context);
    tabsActivity = (TabsActivity) getActivity();
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_add_booking, container, false);

    lastNameEditText = (NASEditText) view.findViewById(R.id.nas_add_booking_last_name);
    pnrEditText = (NASEditText) view.findViewById(R.id.nas_add_booking_pnr);

    addButton = (NASButton) view.findViewById(R.id.nas_add_booking_add_button);
    scanButton = (NASButton) view.findViewById(R.id.nas_add_booking_scan_button);

    confirmationBox = (LinearLayout) view.findViewById(R.id.nas_add_booking_confirmation_box);
    confirmationText = (NASHeaderAndSubtext) view.findViewById(R.id.nas_add_booking_confirmation_text);
    confirmationBox.setVisibility(View.GONE);

    bindButtons();

    FontHelper.setFont(container, tabsActivity);
    return view;
}

By debugging I can see that the editText is setting the text by breakpointing inside the overrided OnTextChanged.

This is the stacktrace from that breakpoint: Stacktrace
(NASEditText is my custom view)

Two problems / questions:

  1. How can I prevent the activity/fragment/editText from filling in the text in the fields when fragment is restored?
  2. Why is it filling in the same text for all fields?

Solution

  • Found the problem with help from a friend!

    SaveEnabled is default true on editTexts in Android.


    The solution is simply to set:
    setSaveEnabled(false);
    on your editText.

    Turns out Android isn't very smart in how it restores state for views with identical IDs in the same hierarchy (even in parent views with different IDs). I just turned this off because I save my state in a ViewModel object and restore it from my fragment's onCreateView().