IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Changer le contenu d'un TabHost


Sujet :

Android

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 24
    Par défaut Changer le contenu d'un TabHost
    Bonjour à tous,

    Je souhaite faire une application avec des onglets (pour ceux qui sont intéressés : un exemple sur google, il existe une multitude d'exemples même en français).

    En reprenant le code ça donne çà (il suffit de suivre les tuto de base) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    import android.app.TabActivity;
    import android.content.Intent;
    import android.content.res.Resources;
    import android.os.Bundle;
    import android.view.Window;
    import android.view.WindowManager;
    import android.widget.TabHost;
     
    public class Principale extends TabActivity {
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            Resources res = getResources(); // Resource object to get Drawables
            TabHost tabHost = getTabHost();  // The activity TabHost
            TabHost.TabSpec spec;  // Resusable TabSpec for each tab
            Intent intent;  // Reusable Intent for each tab
            // Create an Intent to launch an Activity for the tab (to be reused)
            intent = new Intent().setClass(this, onglet1.class);
            // Initialize a TabSpec for each tab and add it to the TabHost
            spec = tabHost.newTabSpec("Aujourd'hui").setIndicator("Aujourd'hui")
                          .setContent(intent);
            tabHost.addTab(spec);
            // Do the same for the other tabs
            intent = new Intent().setClass(this, onglet2.class);
            spec = tabHost.newTabSpec("Historique").setIndicator("Historique")
                          .setContent(intent);
            tabHost.addTab(spec);
            tabHost.setCurrentTab(0);
        }
    }
    et chaque onglet est composé d'une activité :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public class onglet1 extends Activity {
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.tab1);
        }
    }
    setContentView(R.layout.tab1); fait donc appel au fichier tab1.xml que j'ai défini.

    Maintenant si dans mon programme j'envisage de rajouter un bouton et un listener qui qaund je clique dessus me charge non pas pas mon fichier tab1.xml mais un autre fichier tab1bis.xml. Sachant que j'ai déjà essayer de rajouter un setContentView(R.layout.tab1bis); dans un listener et que je plante mon programme quand j'appuie sur ce bouton censé changer l'apparence de mon onglet.

    Comment faire ? Si je n'ai pas été clair n'hésitez pas à me demander de reformuler.

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    322
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 322
    Par défaut
    Bonjour,
    Alors j'ai peut être une solution mais je ne sais pas si elle marche et si c'est propre de faire cela.

    Dans le onCreate je ferai un test sur un paramètre pour savoir quel fichier je dois afficher (valeur passée en paramètre de l'intent par exemple)

    Puis au clic sur le bouton je créerai un intent pour la même activité avec la valeur pour lancer ton autre layout. Tu lances l'activité et tu fermes l'activité courante.

    J'espère avoir été clair...

  3. #3
    Expert confirmé

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Par défaut
    Bonjour,

    Maintenant si dans mon programme j'envisage de rajouter un bouton et un listener qui qaund je clique dessus me charge non pas pas mon fichier tab1.xml mais un autre fichier tab1bis.xml. Sachant que j'ai déjà essayer de rajouter un setContentView(R.layout.tab1bis); dans un listener et que je plante mon programme quand j'appuie sur ce bouton censé changer l'apparence de mon onglet.

    Comment faire ? Si je n'ai pas été clair n'hésitez pas à me demander de reformuler.

    Pourquoi ne pas plutôt merger les deux layout et afficher celui que tu souhaites en fonction de l'état ou tu te trouves , cela évitera de charger un layout à chaque changement d'état .

    Maintenant juste par curiosité c'est quoi comme erreur que tu trouves en ayant un SetContentView dans ton listener ?

  4. #4
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 24
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Pourquoi ne pas plutôt merger les deux layout et afficher celui que tu souhaites en fonction de l'état ou tu te trouves , cela évitera de charger un layout à chaque changement d'état .
    Pardon je ne pense pas avoir compris la notion de merger ?

    J'ai mes deux fichier xml pour simplifier un contient une image (LinearLayout), l'autre un tableau (tablelinearlayout+tablerow). propose tu une fusion ou quelques chose du même genre.


    Maintenant juste par curiosité c'est quoi comme erreur que tu trouves en ayant un SetContentView dans ton listener ?
    je vais refaire le code et te donner çà.

  5. #5
    Expert confirmé

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Par défaut
    Bonjour,

    Pardon je ne pense pas avoir compris la notion de merger ?

    J'ai mes deux fichier xml pour simplifier un contient une image (LinearLayout), l'autre un tableau (tablelinearlayout+tablerow). propose tu une fusion ou quelques chose du même genre.
    Tu as un exemple de merge à ce lien :
    http://developer.android.com/resourc...cks-merge.html

    En gros tu fusionnes les deux layout ensuite dans ton code tu récupère l'objet via un findViewById et tu rends invisible ou pas les layouts.

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 24
    Par défaut
    j'ai fait une recherche sur les merges et j'ai trouvé ceci et du coup je me posa la question suivante :

    Pourquoi ne pas utiliser une commande sur les intents :
    startActivity(new Intent(this,onglet1bis.class));

    donc la première activité :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    public class onglet1 extends Activity implements OnClickListener{
     
    findViewById(R.id.grapheuros).setOnClickListener(this);
     
    	    }
    	@Override
    	public void onClick(View v) {
    		// TODO Auto-generated method stub
    		switch(v.getId())
    		{
    		case R.id.grapheuros:
    		startActivity(new Intent(this,onglet1bis.class));
    		break;
    		}
    	}
    }
    et donc l'activité appelée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public class onglet1bis extends Activity{
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
     
            setContentView(R.layout.tab1bis);
        }
    }
    sachant que quand je fais ça il n'ouvre pas l'activité à la place de l’activité contenu dans l'onglet, mais il ouvre en plus de ma première application.

    je vais essayer de chercher encore. Si quelqu'un a quelque chose à proposer je suis preneur.

Discussions similaires

  1. [DOM] changer le contenu d'un noeud
    Par thefaycal dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 06/08/2009, 13h47
  2. lire et changer le contenu d'texte.txt avec javascript?!
    Par Squalli dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 11/08/2005, 18h20
  3. [JTable] Changer le contenu d'une seule cellule
    Par terminagroo dans le forum Composants
    Réponses: 7
    Dernier message: 05/07/2005, 13h50
  4. TD changer le contenu
    Par C.M dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 18/02/2005, 13h51
  5. [Swing] Changer le contenu d'un Container via un menu
    Par TheSeb dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 07/12/2004, 23h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo