En faisant SRDice je m’étais heurté un moment à la problématique de bien fermer toutes les activity de l’application sur une action. La solution (une fois trouvée, expliquée par Igor Khrupin) avait été simple : Faire hériter toutes mes activity non pas directement de Activity mais d’une activity personnelle (qui elle étend Activity). Et ensuite de mettre le processus de fermeture d’Activity sur cette Activity mère : Dév Android : Fermer toutes les Activity de son appli
Avec Le Val des Etoiles, je me retrouve avec un problème similaire mais avec une contrainte supplémentaire.
En effet, il se trouve que pour afficher les onglets j’utilise en MainActivity une extension non pas de Activity mais de TabActivity.
Par contre toute la gestion du contenu des Onglet (et des menus) se fait bien dans des héritiers de Activity.
Hors ce qu’il se passait quand je demandais la fermeture des Activity, toutes les filles de LeValDesEtoilesActivity (extends Activity) cherchaient à se fermer, mais LVDEMainActivity (extends TabActivity) n’était pas du tout impacté par cette demande de fermeture, et du coup l’application ne se fermait pas.
J’ai donc cherché à fermer une Activity (LVDEMainActivity) depuis une autre (LeValDesEtoilesActivity).
J’ai trouvé la réponse sur : http://stackoverflow.com/questions/14355731/killing-one-activity-from-another/16438596#16438596
Voici en quoi ça consiste :
Dans l’Activity que vous chercher à fermer (dans mon cas : LVDEMainActivity) définissez :
public class LVDEMainActivity extends TabActivity { static LVDEMainActivity LVDEMainActivity; public void onCreate(Bundle savedInstanceState) { LVDEMainActivity = this; } public static LVDEMainActivity getInstance(){ return LVDEMainActivity; } }
La variable static stockera l’instance de l’Activity. Ceci permettra donc dans l’Activity qui cherche à fermer (dans mon cas LeValDesEtoilesActivity) d’agir directement sur LVDEMainActivity :
LVDEMainActivity.getInstance().finish();
Et hop, le tour est joué !
Leave a Reply