Je comprends que lorsque l'orientation de l'écran change, les activités en cours onDestroy () sont appelées, suivies de onCreate () pour recréer efficacement l'activité. J'ai besoin de savoir par programmation si l'application est en cours de sortie ou si juste l'orientation est modifiée.
Une méthode consiste pour l'activité précédente à m'avertir lorsque sa méthode onResume () est appelée, cela me fera savoir que l'utilisateur a appuyé sur le bouton de retour et que l'orientation n'a pas été modifiée.
P.S. Je recherche une solution plus élégante que d'écouter un clic matériel sur le bouton.
Voici ce que je voulais faire:
J'ai deux onglets, lorsque l'activité est entrée pour la première fois ou que l'utilisateur a quitté l'activité et l'entre maintenant, un certain onglet s'affiche en fonction d'un critère.
Lorsque l'orientation change, je dois rester sur le même onglet.
Utilisez la méthode isFinishing()
de l'activité.
@Override
protected void onDestroy() {
super.onDestroy();
if (isFinishing()) {
// do stuff
} else {
//It's an orientation change.
}
}
vous pouvez utiliser isChangingConfigurations()
Lire depuis documentation
Vérifiez si cette activité est en cours de destruction afin d'être recréée avec une nouvelle configuration. Ceci est souvent utilisé dans onStop () pour déterminer si l'état doit être nettoyé ou s'il sera transmis à l'instance suivante de l'activité via onRetainNonConfigurationInstance ().
Renvoie Si l'activité est supprimée afin d'être recréée avec une nouvelle configuration, renvoie true; sinon renvoie faux
Expliquez de manière simple avec un exemple
isChangingConfigurations()
est la méthode utilisée pour vérifier si l'activité sera détruite pour être recréée à nouveau (à la suite d'un changement d'orientation)
Comment l'utiliser ?
si vous utilisez api> = 11 alors pas de problème, mais si vous utilisez api <11 alors nous devons gérer ce manuel de méthode Je fais une variable booléenne appelée IsconfigChange
private boolean IsconfigChange ;
...
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
IsconfigChange = true ;
}
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
@Override
public boolean isChangingConfigurations() {
if(Android.os.Build.VERSION.SDK_INT >= 11){
Log.i("DEBUG", "Orientation changed api >= 11 ");
return super.isChangingConfigurations();
}else {
Log.i("DEBUG", "Orientation changed api < 11 ");
return IsconfigChange;
}
}
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
@Override
protected void onStop() {
super.onStop();
if(isChangingConfigurations()){
Log.i("DEBUG", "isChangingConfirgurations OnStop Called");
} else{
Log.i("DEBUG", "OnStop Called");
}
}
Estival
vous pouvez utiliser isChangingConfigurations
dans onStop
pour vérifier si l'application s'arrête d'être détruite ou en raison d'un changement d'orientation.
ou vous pouvez utiliser isFinishing
vérifier ma réponse ici
pour l'API lvl> = 11 L'activité a une méthode isChangingConfigurations()
Vous pouvez récupérer la valeur de la méthode Activity.getChangingConfigurations () dans votre rappel onDestroy
. Cela renverra un résultat tel que ORIENTATION_PORTRAIT , que vous pourrez comparer à votre orientation actuelle .
Notez que la fermeture de l'activité et les changements d'orientation ne sont pas les seules conditions à considérer ici: qu'en est-il du retour à l'écran d'accueil, des appels téléphoniques entrants et d'autres applications voler le focus, et tous les autres scénarios lorsque votre activité n'est plus à l'avant de la pile?
La plupart du temps, vous n'aurez pas besoin de le faire. Si vous essayez de résoudre un problème d'état d'activité (se manifestant souvent sous la forme d'un NullPointerException
lorsque vous faites pivoter l'écran) en capturant l'événement d'orientation; examinez le cycle de vie de l'activité Android Android et assurez-vous que vous n'essayez pas seulement de pirater un correctif pour un défaut de conception. Postez votre problème d'origine sur ce site si vous n'êtes pas sûr.