Retrait d'une activité à partir de l'histoire de la pile
Mon application montre une inscription de l'activité la première fois que l'utilisateur exécute l'application, ressemble:
- ActivitySplashScreen (bienvenue au jeu, inscrivez-vous pour un compte?)
- ActivitySplashScreenSignUp (grand, remplissez cette info)
- ActivityGameMain (écran de jeu principal)
donc les activités de lancement les uns des autres, exactement de cet ordre, lorsque l'utilisateur clique sur un bouton sur chaque écran.
Lorsque l'utilisateur passe de l'activité #2, #3, est-il possible de wipe #1 et #2 off l'histoire de la pile complètement? J'aimerais qu'il sorte que si l'utilisateur est au n ° 3, et clique sur le bouton précédent, ils ont juste à aller à l'écran d'accueil, au lieu de retourner à l'écran de démarrage.
Je pense que je peux accomplir cela avec des tâches (ie. démarrer une nouvelle tâche n ° 3) mais je voulais voir si il y avait une méthode plus simple,
Grâce
- Après avoir été dans l'écran d'accueil, lorsque l'utilisateur reprend votre application faut-il lui ActivitySplashScreen ou ActivityGameMain?
Vous devez vous connecter pour publier un commentaire.
Vous pouvez atteindre cet objectif en définissant la
android:noHistory
attribut à"true"
dans le<activity>
entrées dans votreAndroidManifest.xml
fichier. Par exemple:FLAG_ACTIVITY_NO_HISTORY
.android:noHistory="true"
android:noHistory="true"
, il sera impossible d'utiliser des choses comme laAccountPicker
au sein de l'Activité; que lors de l'ouverture de votre Activité à proximité.Vous pouvez utiliser la redirection de supprimer le précédent de l'activité de l'activité de la pile lors du lancement de la prochaine. Il y a un exemple dans le APIDemos, mais, fondamentalement, tout ce que vous faites est d'appeler
finish()
immédiatement après l'appel destartActivity()
.FLAG_ACTIVITY_CLEAR_TOP
ne fonctionnera pas parce que C n'est pas déjà dans la pile de retour.android:label="@string/activity_name_chat_add_dialog"
lanohistory
option ne peut pas être utilisé dans mon cas, pour diverses raisons.Finish()
fonctionne parfaitement après l'appel destartActivity()
Oui, avoir un regard sur L'intention.FLAG_ACTIVITY_NO_HISTORY.
android:noHistory="true"
dans le manifeste.intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY)
définir cet indicateur.Ce n'est probablement pas le moyen idéal de le faire. Si quelqu'un a une meilleure façon, je vais attendre avec impatience sa mise en œuvre. Voici comment je accompli cette tâche avec la pré-version-11 sdk.
dans chaque classe, vous voulez aller loin quand il est temps clair, vous avez besoin pour ce faire:
puis celui qui doit déclencher la chaîne de pop à partir de la pile besoins de simplement appeler cette fonction lorsque vous voulez lancer:
Ensuite les activités ne sont pas sur la pile!
Rappelez-vous les gens, que vous pouvez démarrer une activité, puis de commencer à nettoyer derrière elle, l'exécution ne suit pas une seule (l'interface utilisateur) thread.
D'une manière qui fonctionne pré API 11 est de commencer
ActivityGameMain
d'abord, puis dans leonCreate
de début de l'Activité de votreActivitySplashScreen
activité. LeActivityGameMain
n'apparaît pas comme vous les appelez startActivity trop tôt pour le splash.Alors vous peut clair de la pile lors du démarrage de
ActivityGameMain
par la définition de ces indicateurs sur l'Intention:Vous devez également ajouter à ActivitySplashScreen:
De sorte que la pression de retour sur cette activité ne rentre pas dans votre
ActivityGameMain
.Je suppose que vous ne voulez pas l'écran de démarrage pour être retourné à l'un ou l'autre, pour atteindre ce que je suggère le paramètre
noHistory
dans votreAndroidManifest.xml
. Ensuite, mettre legoBackPressed
code dans votreActivitySplashScreenSignUp
classe à la place.Cependant j'ai trouvé quelques façons de se débarrasser de cette. Démarrer une autre application à partir d'une notification alors que
ActivitySplashScreenSignUp
est montré et le retour de l'histoire n'est pas réinitialisé.La seule véritable façon de contourner cela est de l'API de 11:
- Je utiliser de cette façon.
Je sais je suis en retard sur ce (ça fait deux ans depuis que la question a été posée), mais je l'ai accompli en interceptant l'arrière appuyez sur le bouton. Plutôt que de vérifier pour des activités spécifiques, je viens de regarder le comte et si c'est moins de 3, il suffit d'envoyer à l'application de l'arrière (suspension de l'application et le retour de l'utilisateur pour tout ce qui était en cours d'exécution avant le lancement). - Je vérifier pour les moins de trois parce que je n'ai qu'un écran d'introduction. Aussi, j'ai vérifier le décompte parce que mon application permet à l'utilisateur de naviguer vers l'écran d'accueil par le menu, ce qui leur permet de sauvegarder par le biais d'autres écrans comme normal si il y a d'autres activités que l'écran d'introduction sur la pile.
Juste mis
noHistory="true"
dans Manifeste fichier.Il fait de l'activité d'être retiré de la backstack.
Dans le manifeste, vous pouvez ajouter:
Vous pouvez également appeler
immédiatement après l'appel de startActivity(..)
pour API >= 15 API 23
autre solution ne fonctionne pas dans mon cas . enfin je obtenir celui-ci.
C'est fou que personne n'a mentionné cette solution élégante. Ce doit être la accepté de répondre.
SplashActivity -> AuthActivity -> DashActivity
La clé ici est d'utiliser
intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
par l'intermédiaireActivity
. Une fois que le moyen de liaison est rompue, l'DashActivity
sera la première et la dernière dans la pile.android:noHistory="true"
est une mauvaise solution, car il provoque des problèmes lorsqu'ils s'appuient sur laActivity
comme un rappel de l'e.gonActivityResult
. C'est la solution recommandée et doit être accepté.C'est trop tard mais j'espère que ça aide. La plupart des réponses ne sont pas pointer dans la bonne direction. Il y a deux drapeaux pour telle chose.
À partir d'Android docs:
Suffit d'appeler cette.finish() avant startActivity(intent), ce
Essayez ceci:
intent.addFlags(Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY)
c'est l'API de Niveau 1, cochez la lien.
Intent.FLAG_ACTIVITY_NO_HISTORY
?