Catégories

Je les lis (et ils le valent bien!)

Dév Android : Fermer une activity depuis une autre

Logo AndroidEn 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

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

  

  

  

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.