I'm trying to create a Fragment that retains its state after it is shown back.
For this I tried using getFragmentManager().saveFragmentInstanceState() inside onPause() & then calling setInitialSavedState() inside onCreateView().
Issues I'm facing is I dont know how to use them exactly and when to call them.
Also both functions take a paramater of type SavedState, which I'm not sure how to use.
Code:
public class AudioContainerFragmentClass extends Fragment implements
        OnClickListener {
    final String TAG = "AudioContainerFragmentClass";
    private Button bSetName;
    private TextView tvName;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View view = null;
        try {
            Log.e(TAG, "onCreateView()");
            view = inflater.inflate(R.layout.audio_fragment_container, null);
            bSetName = (Button) view.findViewById(R.id.bSetName);
            tvName = (TextView) view.findViewById(R.id.tvName);
            bSetName.setOnClickListener(this);
            if(savedInstanceState != null){
                setInitialSavedState(/* WHICH SavedState OBJECT TO PASS */);
            }
            Log.e(TAG, "onCreate()");
        } catch (Exception e) {
            Log.e(TAG, "onCreateView(): " + e.toString());
        }
        return view;
    }
    /*
    @Override
    public void onSaveInstanceState(Bundle outState) {
        Log.e(TAG, "onSaveInstanceState()");
        super.onSaveInstanceState(outState);
    }
    */
    @Override
    public void onClick(View v) {
        tvName.setText("sometext");
    }
    @Override
    public void onPause() {
        super.onPause();
        getFragmentManager().saveFragmentInstanceState( /* WHAT TO ADD HERE */);
    }
}
Just investigating this myself and thought I'd record what I found.
setInitialSavedState() can't be called after a Fragment has been attached to an Activity, as noted in the Android source code around line 491.
setInitialSavedState() is intended to be used immediately after instantiating fragments in code. For example:
AudioContainerFragmentClass newFrag = new AudioContainerFragmentClass();
newFrag.setInitialSavedstate(savedStateObject);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With