2011-10-14 5 views
0

dans mon activité J'ai une page de connexion (L), qui mène à la hiérarchie des activités (L -> A -> B -> C). Lorsque l'utilisateur se connecte, et qu'il passe à l'activité C, il minimise son application et après un certain temps, le système va fermer une force sur cette application. Maintenant, quand il a recommencé à utiliser cette application, il aurait du voir, où il a passé la dernière fois qu'une application fonctionnait avec toutes les activités ouvertes sur la pile (s'il était en C, un bouton de retour mène à B, puis à A, puis à L). Comment réaliser un tel comportement sur Android? J'utilise maintenant sharedpreference, qui est une chaîne de hodling d'activités visitées, puis un flag, qui me dit si une application a été terminée avec System close ou user close et que je persiste chaque activité avec sa propre préférence partagée. Si le système tue mon application, après ouverture de session, j'ouvre une série d'activités ouvertes passées dans le cycle Pour, mais elles sont uniquement sur la pile. Ils sont ouverts (= la méthode OnCreate est lancée) uniquement lorsque j'utilise le bouton Précédent pour les voir.Android - connexion et connexion

Voyez-vous une approche plus propre?

Merci

Répondre

0

Quand je veux maintenir la hiérarchie après une force de fermeture I contournent la pile d'activité en remplaçant chaque activité avec celle qu'il appelle puis passer outre l'événement de retour à faire la même chose dans le sens inverse.

Dans ActivityL.java, où vous voulez aller à ActivityA:

Intent intent = new Intent(getApplicationContext(), ActivityA.class); 
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
startActivity(intent); 
finish(); 

Vous avez maintenant une seule activité sur la pile - ActivityA. Pour que le bouton de retour se comporter correctement et vous revenez à ActivityL, ajoutez ceci à ActivityA:

@Override 
public void onBackPressed() { 
    Intent intent = new Intent(getApplicationContext(), ActivityL.class) 
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    startActivity(intent); 
    finish(); 
} 

Vous aurez toujours besoin de stocker suffisamment d'informations d'état pour vous aider à revenir à l'activité où l'utilisateur était avant la force de fermeture . Dans onCreate for ActivityL, vérifiez les informations d'état pour déterminer la vue sur laquelle vous souhaitez que l'utilisateur apparaisse et utilisez le code similaire au premier bloc ci-dessus pour y accéder directement.

Cela me semble un peu plus propre que de reconstruire toute la pile d'activité au démarrage. Cela devient toutefois plus complexe si vos activités ne suivent pas une hiérarchie stricte. (c'est-à-dire que parfois l'activité A commence l'activité B et parfois elle commence l'activité C).

+0

Merci, mais cela signifie qu'une seule activité reste sur la pile, ce qui est pour moi inapproprié – Waypoint

+0

Puis-je demander pourquoi? Du point de vue de cette solution, la pile est juste un détail d'implémentation. Je maintiens une pile "virtuelle" de taille arbitraire avec cette méthode et l'expérience utilisateur est indiscernable d'avoir plusieurs activités ouvertes sur la pile d'activité standard. – goto10

+0

Oui, mais ce n'est pas approprié pour moi, parce que je vais avoir des applications commerciales assez lourdes. Ceci est utilisable, je pense, pour les petites applications – Waypoint