5

I am trying to deal with saving the fragment's state in order to avoid problem when the screen is rotated. It happens a strange thing: when I rotate the screen for the first time everything works, but when I rotate the screen for the second time application crashes:

Here part of the code of the fragment

    //save information: a string and an image
    @Override
    public void onSaveInstanceState(Bundle bundle) {
        super.onSaveInstanceState(bundle);
        bundle.putString("namesurname", nameSurnameString);
        bundle.putParcelable("imgprofile", bitmap);

    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        if (savedInstanceState != null) {
            //Restore the fragment's state
            this.nameSurname.setText(getArguments().getString("namesurname"));
            this.profileImage.setImageBitmap((Bitmap)getArguments().getParcelable("imgprofile"));
        }
    }

Here there is part of the code of the activity

//save the fragment
@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    //THE NEXT ONE IS LINE THAT RAISES THE EXCEPTION  WHEN I ROTATE THE SCREEN 
    //FOR THE SECOND TIME
    getSupportFragmentManager().putFragment(outState, "profileFragment", profileFragment);
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    FacebookSdk.sdkInitialize(getApplicationContext());
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_drawner);

    //getting stuff from intent....

    if (savedInstanceState != null) {
        //Restore the fragment's instance

        this.profileFragment = (ProfileFragment) getSupportFragmentManager().getFragment(
                savedInstanceState, "profileFragment");
        restoredProfile=true;

    }

the error is this one

05-20 03:11:12.423  30088-30088/? E/AndroidRuntime﹕ FATAL EXCEPTION: main
    java.lang.IllegalStateException: Fragment ProfileFragment{425cdd38} is not currently in the FragmentManager
            at android.support.v4.app.FragmentManagerImpl.putFragment(FragmentManager.java:573)
            **at com.mypackage.DrawnerActivity.onSaveInstanceState(DrawnerActivity.java:80)**
            at android.app.Activity.performSaveInstanceState(Activity.java:1185)
            at android.app.Instrumentation.callActivityOnSaveInstanceState(Instrumentation.java:1233)
            at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3802)
            at android.app.ActivityThread.access$800(ActivityThread.java:158)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1302)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:176)
            at android.app.ActivityThread.main(ActivityThread.java:5365)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
            at dalvik.system.NativeStart.main(Native Method)
Bella
  • 139
  • 1
  • 2
  • 10

2 Answers2

8

canc you check Why won't Fragment retain state when screen is rotated?

public class SettingsActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        if (savedInstanceState == null)
        {
            // Display the fragment as the main content.
            getFragmentManager().beginTransaction()
                .replace(android.R.id.content, new SettingsFragment())
                .commit();
        }
    }
}
Community
  • 1
  • 1
QuestionAndroid
  • 881
  • 1
  • 8
  • 25
4

Let's see the error, it says your fragment is not in your manager, because when you change the state of screen, your activity will be rebuild, and the fragment is destroyed too. Now, the fragment is not create and not a instance, so your fragment is not in the supportFragmentManager.

For save the state, you can google about this method setRetainInstance(true), and figure out some solutions.

Hope it can help you.

Eduardo Cuomo
  • 17,828
  • 6
  • 117
  • 94
Jafir
  • 93
  • 9
  • 1
    thanks, this is the right way! here I found the correct solution [docs](http://developer.android.com/guide/topics/resources/runtime-changes.html) – Bella May 20 '15 at 23:06