Skip to content Skip to sidebar Skip to footer

How To Retain The State Of Activity In Android

How do I retain the state of an activity in android? I have two layouts for portrait and landscape in layout and layout-land. I am loading the value from service at the time I am s

Solution 1:

When orientation changes, the Activity is reloaded by default. If you do not want this behavior then add this to the Activity definition in your manifest:

android:configChanges="orientation|keyboardHidden"

For more detail, see Handling Runtime Changes

Solution 2:

You can use the onRetainNonConfigurationChange() callback to store arbitrary data. It is called just before your application is about to be recreated.

Then, in onCreate() just check if some data were put aside by calling getLastNonConfigurationInstance() that returns the Object you put aside or null.

See this article on android developers.

Here's a sample borrowed from the link above:

@OverridepublicObjectonRetainNonConfigurationInstance() {
    //this is called by the framework when needed//Just return what you want to save here.returnMyBigObjectThatContainsEverythingIWantToSave;
}

Automagic restore of previously saved state:

@OverridepublicvoidonCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    finalMyDataObjectMyBigObjectThatContainsEverythingIWantToSave= (MyDataObject) getLastNonConfigurationInstance();
    if (MyBigObjectThatContainsEverythingIWantToSave == null) {
        //No saved state
        MyBigObjectThatContainsEverythingIWantToSave = loadMyData();
    } else {
        //State was restored, no need to download again.
    }
    ...
}

Solution 3:

When orientation changes, the Activity is reloaded by default. If you do not want this behavior then add this to the Activity definition in your android manifest file :

android:configChanges="orientation|screenSize|keyboardHidden"

Post a Comment for "How To Retain The State Of Activity In Android"