2010-09-26 7 views
4

Comment fermer une hiérarchie d'activités et afficher une nouvelle activité non présente dans la tâche en cours?Fermer la hiérarchie des activités dans Android

Contexte

Tenir compte d'un navigateur FTP qui reprend la session précédente sur le lancement. Chaque dossier est affiché dans sa propre activité. Lorsque je clique sur un dossier, une nouvelle activité est lancée pour le dossier. Si j'appuie sur le bouton de retour, l'application revient à l'activité précédente, qui correspond au dossier parent.

Je peux me déconnecter du menu à tout moment. La déconnexion doit m'amener à l'activité de connexion (ne pas présenter la tâche en cours lorsque l'application a repris la session), et fermer toutes les autres activités. Comment puis-je faire ceci? D'après ce que j'ai lu, si l'activité était dans la tâche en cours, je pourrais utiliser FLAG_ACTIVITY_CLEAR_TOP dans l'intention, mais ce n'est pas mon cas.

Répondre

0

Une approche peut utiliser startActivityForResult. Par exemple, votre première activité est LoginActivity et les activités suivantes sont FolderActivity. Ainsi, le flux sera
1. LoginActivity (lanceur d'activité)
2. Activité de dossier (racine du dossier)
3. FolderActivity (contenu des dossiers de clic) ... et ainsi de suite
donc maintenant utiliser startAcitivityForResult pour démarrer une nouvelle activité de dossier.

public class LoginActivity extends Activity { 
    onCreate() { 
    } 
    onLogin() { 
    startActivityForResult(intent, 100 /*some request code*/); //start Folder Activity, 
    } 
    @override 
    onActivityResult(int requestCode, int resultCode, Intent intent) { 
    if(requestCode == 100 && resultCode == LOGOFF_ACTION) { 
     //sign out and show the login screen 
    } 
}

public class FolderActivity extends Activity{ onCreate() { } onClickOnSomeFolder() { startActivityForResult(intent /*with folder details etc*/, 100); } @override onActivityResult(int requestCode, int resultCode, Intent intent) { if(requestCode == 100 && resultCode == LOGOFF_ACTION) { setResult(resultCode, intent); finish(); } else if(requestCode == 100 && resultCode == BACK_BUTTON) { /*No need to finish this activity*/ } } onBackButton(){ setResult(BACK_BUTTON, intent); finish(); } onLogOff(){ setResult(LOGOFF_ACTION, intent); finish(); } }

Donc maintenant, si l'utilisateur choisit de se déconnecter en utilisant le menu, les activités commenceront à finir dans le même ordre jusqu'à atteindre LoginActivity.

+0

Merci bhups! C'est ce que nous faisons en ce moment (notre constante s'appelle RESULT_KILLER_VIRUS: P), mais elle semblait terriblement compliquée et sujette aux erreurs. J'espère qu'il y a une meilleure solution. – hpique

+0

Pourquoi utiliser ActivityGroup avec LocalActivityManager? Vous pouvez avoir LoginActivity et FolderActivityGroup. Utilisez LocalActivityManager pour démarrer FolderActivity et lorsque l'utilisateur se déconnecte, vous pouvez détruire toutes les activités de FolderActivityGroup en appelant LocalActivtyManager.removeAllActivities(). – bhups

Questions connexes