Activity restart on rotation Android

De openkb
Aller à : Navigation, rechercher

Sommaire

Questions

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.

Answers

  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 overridden onCreate method within that class.

public class MyApplicationClass extends Application {
  @Override
  public void onCreate() {
    super.onCreate();
    // TODO Put your application initialization code here.
  }
}

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:  
<application
    android:name="com.you.yourapp.MyApplicationClass"

http://www.androiddesignpatterns.com/2013/04/retaining-objects-across-config-changes.html http://www.androiddesignpatterns.com/2013/04/retaining-objects-across-config-changes.html

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 node

android:configChanges="keyboardHidden|orientation"

http://stackoverflow.com/a/9550231/2291 http://stackoverflow.com/a/9550231/2291

android:configChanges="keyboardHidden|orientation|screenSize"

Then within the Activity override the onConfigurationChanged method and call setContentView to force the GUI layout to be re-done in the new orientation.

@Override
public void onConfigurationChanged(Configuration newConfig) {
  super.onConfigurationChanged(newConfig);
  setContentView(R.layout.myLayout);
}

Source

License : cc by-sa 3.0

http://stackoverflow.com/questions/456211/activity-restart-on-rotation-android

Related

Outils personnels
Espaces de noms

Variantes
Actions
Navigation
Outils