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

Composants graphiques Android Discussion :

Association layout et activity


Sujet :

Composants graphiques Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Étudiant
    Inscrit en
    Février 2011
    Messages
    64
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2011
    Messages : 64
    Par défaut Association layout et activity
    Bonjour tout le monde.

    J'ai un soucis pour le développement d'une appli android, et plus particulièrement concernant l'utilisation d'un layout; je m'explique.

    De base, quand l'appli se lance, un layout (main.xml) est utilisé.
    Je voudrais donc en utiliser un nouveau lorsque je lance une nouvelle activité (le création de la nouvelle activité se fait lors de la sélection d'un item dans un menu)
    Ce que je voudrais, c'est que lorsque la nouvelle activité est lancée, un nouveau layout soit pris en compte, et non le main.xml (et, bien évidemment, lorsque je ferais retour, donc que je reviendrais sur l'activity de base, le main.xml reprend la main).

    je vous met une petite partie du code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public boolean onOptionsItemSelected(MenuItem item) {
        	switch(item.getItemId()){
        	case 1:
        		Intent intent = new Intent(this, Main.class);    		
        		intent.putExtra("param", 1);
        		this.startActivityForResult(intent, 1);
        		break;
             ...
    }
    Ensuite, je met une nouvelle ligne de code (je l'ai pas mis là parce que j'ai essayé de la mettre a plusieurs endroit sans succès, donc j'indique juste l'idée)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setContentView(R.layout.layout2.xml);
    Le problème, c'est que le layout2.xml remplace le layout de l'activité de base (main.xml donc), et la nouvelle activité prend le layout main.xml.
    Donc, après ajout du setContentView, l'actitivé de base prend le nouveau layout, et la nouvelle activity prend le layout du main.

    Je me demande donc si la méthode setContentView est vraiment celle que je dois utiliser, si il n'y en a pas une autre ?

  2. #2
    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 ,


    A chaque activity tu peux au début lui attribuer son layout (tu peux le modifier par la suite mais cela reste plus clair s'il reste le même par activity).

    Donc au create de chaque activity tu lui attribues un layout comme tel. Et normalement il prendra ce layout pour l'activity en cours .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      @Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.tonlayout);
    Par contre dans l'exemple que tu as donné, c'est normal que tu rappelles ta Main.class
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Intent intent = new Intent(this, Main.class);    		
        		intent.putExtra("param", 1);
        		this.startActivityForResult(intent, 1);
    Ce ne serait pas plutôt comme cela l'appel que tu voudrais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Intent intent = new Intent(this, TaNouvelleActivity.class);    		
        		intent.putExtra("param", 1);
        		this.startActivityForResult(intent, 1);

    Cordialement ,

  3. #3
    Membre confirmé
    Étudiant
    Inscrit en
    Février 2011
    Messages
    64
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2011
    Messages : 64
    Par défaut
    merci pour ta réponse Feanorin.
    Sur le principe, je suis plutôt d'accord avec le fait d'attribuer le layout au début de l'activité, mais je ne vois pas comment faire :s (j'ai essayé de surclassé la méthode onCreat après l'instanciation de ma nouvelle activité, mais c'est pas possible)

    Et, pour la seconde remarque, je n'utilise pas de nouvelle classe, le code a exécuter par la nouvelle activité sera très basique (tout du moins pour le moment), donc je pense que Main.class semble la bonne solution, je me trompe ? (et, si je me trompe, je vois pas quoi mettre ...)

  4. #4
    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
    mais je ne vois pas comment faire :s (j'ai essayé de surclassé la méthode onCreat après l'instanciation de ma nouvelle activité, mais c'est pas possible)
    Comme je te l'ai indiqué ci dessus , il n'y a pas plus simple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     @Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.'le nom de ton layout que tu veux afficher');
    Et, pour la seconde remarque, je n'utilise pas de nouvelle classe, le code a exécuter par la nouvelle activité sera très basique (tout du moins pour le moment), donc je pense que Main.class semble la bonne solution, je me trompe ? (et, si je me trompe, je vois pas quoi mettre ...)
    la je ne suis plus du tout !
    si tu veux afficher d'autres informations , ce qui a l'air d' être le cas puisque tu appelle un nouveau intent , alors tu as besoin d'une nouvelle classe , sinon j'ai loupé un truc

    PS: c'est pas parce que c'est basique , qu'il faut tout mettre dans une même activity. Si le code le demande alors créant une nouvelle .

  5. #5
    Membre confirmé
    Étudiant
    Inscrit en
    Février 2011
    Messages
    64
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2011
    Messages : 64
    Par défaut
    Peut être que mon approche est mauvaise, donc je vais expliquer rapidement ce que je souhaite.

    En "première page" (le terme n'est pas bon, mais j'espere que tu comprend), je veux que le layout contienne plusieurs bouton, du text, ou encore autre chose.
    Jusque là, pas de problème.
    Ensuite, ce que je souhaite, c'est qu'en sélectionnant un item du menu de la "première page", une nouvelle page s'affiche avec un layout totalement différent.
    C'est pour ca que je suis partie sur l'idée de lancer une nouvelle activité, pour pouvoir changer le layout.

    En écrivant ces lignes, je comprend un peu ce que tu voulais me dire.
    Même si j'ai pas grand chose a exécuter pour le moment, mon activité doit absolument être dans une nouvelle classe ? (ce qui, effectivement, résoudrait le problème du onCreat avec le nouveau layout)

    Je vais donc partir sur ca.
    Mais, juste pour savoir, est ce qu'il y a d'autre moyens de faire ce genre de chose sans passer par une nouvelle activité dans une nouvelle classe ?

    Cordialement

    EDIT : cela fonctionne effectivement
    Merci beaucoup pour ton aide

  6. #6
    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
    Re,

    Oui il y a d'autres moyens

    1/ soit tu mets tout tes items dans ton layout et en fonction de l'état du système tu affiches certain éléments et tu caches les autres. (ça sera le gros bordel dans ton layout ainsi que dans ton code)

    2/ soit dans l'activity tu refais un ContentSetView (); du nouveau layout que tu veux affiché à n'importe quel endroit dans le code , à ce moment l'interface graphique changera . Par contre cette méthode influe un gros bordel dans le code car il faut que tu sache dans quel état tu es pour récupérer les bon éléments sinon lors d'un FindViewById tu risque d'avoir une erreur durant l'exécution de ton application


    Pour ma part les deux possibilités sont à proscrire. Seule celle utilisant une nouvelle activity est facilement lisible et claire .

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Vider TableLayout déclaré dans le layout de l'Activity
    Par absot dans le forum Composants graphiques
    Réponses: 5
    Dernier message: 11/02/2013, 18h10
  2. Réponses: 0
    Dernier message: 09/03/2009, 16h33
  3. [1.x] Comment associé une action au gabarit principal layout.php
    Par rockybalboa dans le forum Symfony
    Réponses: 3
    Dernier message: 04/07/2008, 16h37
  4. Réponses: 4
    Dernier message: 21/01/2008, 22h35
  5. [Kylix] Clé d'activation
    Par Anonymous dans le forum EDI
    Réponses: 1
    Dernier message: 27/03/2002, 23h19

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