Question

Je dois appliquer différentes mises en page pour les orientations portrait et paysage de mon activité. D'ailleurs, je dois montrer alerte si l'orientation est en mode portrait.

J'ai indiqué dans android:configChanges="orientation|keyboardHidden" AndroidManifest. Je surchargeons aussi la méthode onConfigurationChanged comme ceci:

@Override
public void onConfigurationChanged(Configuration newConfig)
{
    Log.d("tag", "config changed");
    super.onConfigurationChanged(newConfig);

    int orientation = newConfig.orientation;
    if (orientation == Configuration.ORIENTATION_PORTRAIT)
        Log.d("tag", "Portrait");
    else if (orientation == Configuration.ORIENTATION_LANDSCAPE)
        Log.d("tag", "Landscape");
    else
        Log.w("tag", "other: " + orientation);

    ....
}

Pendant la rotation du paysage ressemble journal portrait comme:

config changed
Portrait

Mais alors qu'il ressemble à changer du mode portrait au paysage

config changed
Portrait
config changed
Landscape

Pourquoi onConfigurationChanged est appelé deux fois? Comment puis-je éviter?

Était-ce utile?

La solution

Voir ma réponse à une autre question ici: https://stackoverflow.com/a/3252547/338479

En bref, la configuration change la manipulation correcte est difficile à faire. Il est préférable de mettre en œuvre onRetainNonConfigurationInstance () qui est appelé juste avant que votre demande est sur le point d'être arrêté et redémarré en raison d'un changement de configuration. Utilisez cette méthode pour enregistrer tout ce que vous voulez ( « ce » est un bon choix), puis laisser la déchirure du système votre application.

Lorsque votre application se reprend avec la nouvelle configuration, l'utilisation

Autres conseils

Vous pouvez simplement sauvegarder l'orientation précédente et vérifier si elle a vraiment changé.

Si vous définissez dans AndroidManifest.xml android:configChanges à keyboardHidden|orientation pour votre activité, onCreate etc ... ne sera pas appelé. Cela rend la mise en œuvre beaucoup plus facile à mettre en œuvre. Mais la mise en page bien sûr changera du mode portrait au paysage ainsi.

Je suis sûr que vous voulez utiliser onCreate plutôt que onStart. La seule différence semble être que onStart sera appelé lorsque l'application est au premier plan. Ce ne serait pas un cas où vous voudriez faire de l'utilisateur vous attendent pour réinitialiser l'interface utilisateur. Dans le cas contraire, il suffit de changer votre appel setContentView sur cette base si la condition.

Android démarre une nouvelle instance de votre activité lors d'un changement d'orientation de façon à l'aide onCreate est la méthode idéale. Vous devrez sauvegarder / restaurer les données de votre activité évidemment pour reprendre là où vous l'avez laissé -. Mais vous devriez faire cela de toute façon depuis un certain nombre d'événements peuvent Unfocus / tuer votre application

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top