android fragment onRestoreInstanceState

AndroidSaveStateAndroid Fragments

Android Problem Overview


Am I missing something or do Fragments not have a onRestoreInstanceState() method? If not, how do I go about attaining something similar?

Android Solutions


Solution 1 - Android

Fragments do not have an onRestoreInstanceState method.

You can achieve the same result in onActivityCreated, which receives a bundle with the saved instance state (or null).

Check the source code here.

Solution 2 - Android

I know, that you have accepted answer, but you should read the official documentation about fragments, and it says (paragraph "Handling the Fragment Lifecycle"):

> You can retain the state of a fragment using a Bundle, in case the activity's process is killed and you need to restore the fragment state when the activity is recreated. You can save the state during the fragment's onSaveInstanceState() callback and restore it during either onCreate(), onCreateView(), or onActivityCreated()

So, you can use that suits you best: onCreate(), onCreateView(), or onActivityCreated()

Solution 3 - Android

In Fragments guide's ListFragment example you can find:

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putInt("curChoice", mCurCheckPosition);
}

Which you can use like this:

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    if (savedInstanceState != null) {
        // Restore last state for checked position.
        mCurCheckPosition = savedInstanceState.getInt("curChoice", 0);
    }
}

onActivityCreated() is invoked after the fragment returns back from the stack.

Solution 4 - Android

onViewStateRestored of Fragment is the equivalent of onRestoreInstanceState of Activity. But it is called after onActivityCreated(Bundle) and before onStart().

Solution 5 - Android

onActivityCreated is deprecated. and i found it just confusing in terms of the fragment lifecycle. just do this:

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putInt("curChoice", mCurCheckPosition);
}

// and then:

  override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
            super.onViewCreated(view, savedInstanceState)
    savedIInistanceState?.let{ 
//restore the data here
    }
    }

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionShaunView Question on Stackoverflow
Solution 1 - AndroidmgvView Answer on Stackoverflow
Solution 2 - AndroidjimpanzerView Answer on Stackoverflow
Solution 3 - AndroidGaurav DarjiView Answer on Stackoverflow
Solution 4 - AndroidnhkhanhView Answer on Stackoverflow
Solution 5 - Androidj2emanueView Answer on Stackoverflow