In my Android application, when I rotate the device (slide out the keyboard) then my Activity
is restarted (onCreate
is called). Now, this is probably how it's supposed to be, but I do a lot of initial setting up in the onCreate
method, so I need either:
- Put all the initial setting up in another function so it's not all lost on device rotation or
- Make it so
onCreate
is not called again and the layout just adjusts or - Limit the app to just portrait so that
onCreate
is not called.
Add this line to your manifest :-
and this snippet to the activity :-
I just simply added
in the manifest file and did not add any
onConfigurationChanged
method in my activity.So every time the keyboard slides out or in nothing happens.
It is very simple just do the following steps:
This works for me :
Note: orientation depends on your requitement
Using the Application Class
Depending on what you're doing in your initialization you could consider creating a new class that extends
Application
and moving your initialization code into an overriddenonCreate
method within that class.The
onCreate
in the application class is only called when the entire application is created, so the Activity restarts on orientation or keyboard visibility changes won't trigger it.It's good practice to expose the instance of this class as a singleton and exposing the application variables you're initializing using getters and setters.
NOTE: You'll need to specify the name of your new Application class in the manifest for it to be registered and used:
Reacting to Configuration Changes [UPDATE: this is deprecated since API 13; see the recommended alternative]
As a further alternative, you can have your application listen for events that would cause a restart – like orientation and keyboard visibility changes – and handle them within your Activity.
Start by adding the
android:configChanges
node to your Activity's manifest nodeor for Android 3.2 (API level 13) and newer:
Then within the Activity override the
onConfigurationChanged
method and callsetContentView
to force the GUI layout to be re-done in the new orientation.Changes to be made in the Android manifest are:
Additions to be made inside activity are:
What part of the manifest tells it "don't call
onCreate()
"?Also, Google's docs say to avoid using
android:configChanges
(except as a last resort).... But then the alternate methods they suggest all DO useandroid:configChanges
.It has been my experience that the emulator ALWAYS calls
onCreate()
upon rotation.But the 1-2 devices that I run the same code on... do not. (Not sure why there would be any difference.)