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 :

Lancer un layout xml


Sujet :

Composants graphiques Android

  1. #1
    Membre habitué Avatar de cad13
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 247
    Points : 197
    Points
    197
    Par défaut Lancer un layout xml
    Bonjour,

    J'ai un problème pour lancer un layout xml à partir de mon code java.

    Voici le début de mon code java :
    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
    import android.app.ListActivity;
    import android.os.Bundle;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.widget.ArrayAdapter;
    import android.widget.ListView;
     
    public class CodesDL extends ListActivity {
        /** Called when the activity is first created. */
    	@Override
    	public void onCreate(Bundle savedInstanceState) {
    	  super.onCreate(savedInstanceState);
    	  setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, CODES));
    	  getListView().setTextFilterEnabled(true);
    	}
    J'ai un menu dans lequel je voudrais lancer mon layout xml. Si je fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setContentView(R.layout.toto);
    il plante ("Fermeture soudaine de l'application..."), par contre je peux ouvrir une activity en faisant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Intent intent = new Intent(this, autreactivity.class);
    startActivity(intent);
    Mais ce n'est pas ce qui m'intéresse, car mon layout est en xml.

    Je bloque là dessus, si quelqu'un peut m'aider... Merci
    Christian
    Nexus 1 sous Cyanogen - Acer A500

  2. #2
    Inscrit

    Profil pro
    Inscrit en
    Février 2008
    Messages
    658
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 658
    Points : 892
    Points
    892
    Par défaut
    Il faut appeler setContevView(ton_layout) avant ; juste apres super.oncreate(;;;

  3. #3
    Membre habitué Avatar de cad13
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 247
    Points : 197
    Points
    197
    Par défaut
    Merci pour ta réponse, mais malheureusement ça ne marche pas : j'ai toujours le message d'erreur.

    En plus, ce que je souhaite, c'est appeler le layout lorsque je choisis une option d'un menu et non dès l'ouverture du programme... (qui s'ouvre sur une listview, comme indiqué dans le premier extrait de code).

    C'est bien le setContentView(R.layout.toto); qui fait planter mon programme.
    Christian
    Nexus 1 sous Cyanogen - Acer A500

  4. #4
    Inscrit

    Profil pro
    Inscrit en
    Février 2008
    Messages
    658
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 658
    Points : 892
    Points
    892
    Par défaut
    montre nous ton code ou tu emploi le setcontview

  5. #5
    Membre habitué Avatar de cad13
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 247
    Points : 197
    Points
    197
    Par défaut
    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
    public boolean onOptionsItemSelected(MenuItem item) {
       switch (item.getItemId()) {
       case MENU_TTM:
        	/* Affichage du layout DL93 (tableau des TTM) */
         	setContentView(R.layout.dl93);  	
        	return true;
       case MENU_CODE:
            SearchCode();
    	return true;
       case MENU_QUIT:
            this.finish();
    	return true;
       }
    return false;
    }
    Dans le code il ne met aucune erreur, mais à l'exécution, il plante...
    Christian
    Nexus 1 sous Cyanogen - Acer A500

  6. #6
    Membre habitué Avatar de cad13
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 247
    Points : 197
    Points
    197
    Par défaut
    Pour être plus précis, voici l'erreur :
    Christian
    Nexus 1 sous Cyanogen - Acer A500

  7. #7
    Rédacteur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    2 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 112
    Points : 4 240
    Points
    4 240
    Par défaut
    Salut,
    Cette erreur là n'aide vraiment personne. Ce qu'il faut copier / coller c'est l'exception que ton programme à remonté (à voir dans le view LogCat d'Eclipse). Une fois qu'on aura ça, on pourra t'aider plus facilement.

    De plus, je n'ai pas bien saisie le rapport ici :

    je peux ouvrir une activity en faisant :

    Intent intent = new Intent(this, autreactivity.class);
    startActivity(intent);

    Mais ce n'est pas ce qui m'intéresse, car mon layout est en xml.
    As tu bien saisie ce qu'est une activity, un intent, un layout ?
    Si vous jugez mon post utile dans la résolution de votre problème, n'hésitez pas à utiliser le système de vote afin d'améliorer la qualité du forum

  8. #8
    Membre habitué Avatar de cad13
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 247
    Points : 197
    Points
    197
    Par défaut
    Salut

    Je débute sur Android, je n'ai pas encore bien tout compris, mais dans cette remarque, je voulais juste signaler que je peux faire un startActivity(intent); sans que cela plante, mais dans mon cas ce n'est pas ce que je souhaite faire (objectif : éviter que l'on me propose de faire çà pour résoudre mon problème).

    Concernant le LogCat (je n'avais jamais utilisé jusqu'à présent !), voici la copie d'écran. Je pense que le problème vient de "your content must have a ListView..." ? Mais quel content ? le fichier dl93.xml ?

    Merci de m'avoir mis sur la voie...
    Christian
    Nexus 1 sous Cyanogen - Acer A500

  9. #9
    Rédacteur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    2 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 112
    Points : 4 240
    Points
    4 240
    Par défaut
    Voilà, là c'est déjà plus facile de dépanner, toi même tu as déjà trouver un début de solution.
    Alors pour faire vite : Ton activity CodesDL étend la classe "ListActivity" ce qui implique que dans son layout associé, elle doit contenir un objet graphique de type ListView. Lorsque tu lances ton application, elle lance l'activity "CodesDL". Cette activité vient "inflater" (instancier, transformer le xml en GUI,etc) ton layout (qui contient une ListView). Jusque là le programme se déroule nikel.
    Ensuite, lorsque tu cliques sur ton item (ou bouton, je sais plus), tu demandes à ton activity, non pas de lancer une nouvelle, mais de simplement changer la couche présentation.
    Là Dans la nouveau couche présentation "dl93.xml", tu n'as pas d'objet graphique ListView, du coup, vu que c'est toujours l'activity "CodesDL" qui a en charge ce nouveau layout, ça plante... Le contrat n'est plus respecté entre "CodesDL" (qui étends ListActivity) et ton layout (dl93.xml) car le layout ne contient pas d'objet ListView.

    C'est plus clair ?
    Si vous jugez mon post utile dans la résolution de votre problème, n'hésitez pas à utiliser le système de vote afin d'améliorer la qualité du forum

  10. #10
    Membre habitué Avatar de cad13
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 247
    Points : 197
    Points
    197
    Par défaut
    Merci beaucoup pour ton explication, c'est logique et donc c'est clair pour moi, mais j'ai du mal à imaginer une solution...

    Soit au lieu de simplement changer de couche, j'en appelle une nouvelle, mais comment ?

    Soit je modifie mon layout pour qu'il soit une ListView, mais actuellement c'est un TableLayout, et son format ne permet pas de le transformer en liste...

    Soit je change mon Activity, et au lieu de faire un extends ListActivity, je fais un appel avec un setContentView(R.layout.CodesDL); j'y ai déjà pensé, ce serait simple, mais dans ce cas, j'aurais un autre problème à résoudre : comment envoyer en argument un tableau String à ce layout xml (qui serait une ListView) pour remplir cette liste ? (je souhaite garder ce tableau dans le corps de mon Activity CodesDL car ensuite je vais faire une recherche dans ce tableau, et je n'ai pas envie de le dupliquer dans strings.xml et dans mon Activity).

    Pour les 3 options possibles, je bute...
    Christian
    Nexus 1 sous Cyanogen - Acer A500

  11. #11
    Rédacteur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    2 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 112
    Points : 4 240
    Points
    4 240
    Par défaut
    Décrit nous le fonctionnel de ton application, ça aidera beaucoup dans le choix de la solution.
    Pour l'instant ce que j'en ai compris c'est que : tu as une liste avec des items, quand tu clique sur un item ça t'affiche une page. Il y a également un échange de paramètres entre ces deux pages.
    Qu'elles sont tes contraintes en plus ?
    Si vous jugez mon post utile dans la résolution de votre problème, n'hésitez pas à utiliser le système de vote afin d'améliorer la qualité du forum

  12. #12
    Membre habitué Avatar de cad13
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 247
    Points : 197
    Points
    197
    Par défaut
    Voila, je souhaite faire une application qui affiche une première liste.

    Lorsque l'on clique sur un élément de cette liste, je souhaite afficher une sous-liste de descriptions de codes (ceci permettant de trouver un code dans cette sous-liste).

    Je souhaite aussi effectuer l'opération inverse : à partir d'un code (numéro à 2 chiffres), je souhaite retrouver la description correspondant à ce code.

    Enfin, je souhaite afficher lorsqu'on le souhaite (via un menu), un tableau avec des informations 'j'ai fait un TableLayout pour ce tableau).

    J'ai donc choisi d'utiliser la ListActivity pour afficher mes différentes listes (bien que la présentation soit peu adaptée car je n'arrive pas à modifier la taille des caractères de mes listes, ni la présentation : couleur,...), mais ça marche nickel. Mais avec cette méthode, je n'arrive pas à afficher mon tableau (fichier xml), et je pense que je vais aussi avoir les mêmes soucis pour afficher une interface pour saisir le code dont je souhaite retrouver la description.

    Autre possibilité : appeler une liste sous forme de layout xml, mais pour remplir cette liste, je dois renseigner un fichier array.xml. Pas de problème, sauf que pour faire l'opération inverse de recherche du code dans la liste, je ne sais pas comment rechercher de mon code java vers le fichier array.xml. Donc une solution serait d'envoyer mon tableau de string de mon code java vers le fichier xml sans passer par array.xml. Dans ce cas j'aurais mes tableaux de string dans le code java, et je pourrais faire la recherche.
    Christian
    Nexus 1 sous Cyanogen - Acer A500

  13. #13
    Rédacteur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    2 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 112
    Points : 4 240
    Points
    4 240
    Par défaut
    Pour ton système de listes et de sous liste as tu regardé du coté des "Expandable List" ? Il y a un exemple dans l'API Demo. Selon ton besoin il peut répondre parfaitement à tes attentes.

    Concernant ton problème pour récupérer ton "Array" déclaré dans un fichier xml depuis une classe Java, voici quelques choses qui pourrait t'aider :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maView.getResources().getStringArray(R.array.id_de_mon_array);
    Je te conseille de mettre à plat ton besoin, de faire des schémas de tes différents écrans, et ensuite de définir quel besoin sera couvert par une activity ou un popup ou etc. Tu devrais y gagner
    Si vous jugez mon post utile dans la résolution de votre problème, n'hésitez pas à utiliser le système de vote afin d'améliorer la qualité du forum

  14. #14
    Membre habitué Avatar de cad13
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 247
    Points : 197
    Points
    197
    Par défaut
    Merci pour tes conseils éclairés. En fait j'utilise ce programme pour me former sur Android, je fais donc des essais et ça me permet d'apprendre.

    Je vais regarder l'expandable list, ça peut répondre à mon problème de présentation, mais je vais avoir toujours le même soucis qu'avec ma listview.

    Sinon je vais essayer l'import du tableau vers mon code java.

    Encore merci.
    Christian
    Nexus 1 sous Cyanogen - Acer A500

  15. #15
    Membre habitué Avatar de cad13
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 247
    Points : 197
    Points
    197
    Par défaut
    Merci pour la première idée, la présentation est nettement améliorée avec une Expandable List.

    Je vais essayer de résoudre mon problème d'affichage de layout xml car je me retrouve encore dans le cas précédent d'une activity list qui appelle un layout d'un autre format... Je vais peut-être modifier mon affichage du tableau.
    Christian
    Nexus 1 sous Cyanogen - Acer A500

  16. #16
    Membre habitué Avatar de cad13
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 247
    Points : 197
    Points
    197
    Par défaut
    La liste est plus "jolie", par contre, existe-t-il un moyen d'adapter la hauteur de chaque élément de la sous liste ?

    Voir capture d'écran

    Merci

    UPDATE : j'ai pu voir que l'on peut créer un layout xml pour customiser une liste expandable. J'ai fait quelques essais, mais je n'arrive pas à le faire fonctionner...
    Pour mon plantage, je l'ai toujours (même cause, même effets), je vais donc voir pour changer mon tableau en liste.
    Images attachées Images attachées  
    Christian
    Nexus 1 sous Cyanogen - Acer A500

  17. #17
    Rédacteur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    2 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 112
    Points : 4 240
    Points
    4 240
    Par défaut
    Bonjour,

    Pour customiser les items de ta liste, il va falloir que tu utilise ce qu'on appelle les "adapter". Si tu ne sais pas ce que c'est, je te renvoi encore une fois vers l'API demo, tu trouveras pas mal d'exemple de listes, dont certaines avec des items customisés...
    Bon courage.
    Si tu as un problème avec ses adapters, n'hésites pas à faire un nouveau sujet sur le forum (car c'est un problème différent)
    Si vous jugez mon post utile dans la résolution de votre problème, n'hésitez pas à utiliser le système de vote afin d'améliorer la qualité du forum

  18. #18
    Membre habitué Avatar de cad13
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 247
    Points : 197
    Points
    197
    Par défaut
    Merci pour ton aide, j'ai avancé, et sans avoir à passer par un adapter, j'ai trouvé un "layout prédéfini" qui me convient parfaitement :

    pour le parent, j'utilise
    android.R.layout.simple_expandable_list_item_1

    pour le child, j'utilise
    android.R.layout.simple_list_item_2

    au lieu de
    android.R.layout.simple_expandable_list_item_2

    Ce qui me donne le résultat ci-joint, qui est bien adapté à mon besoin.

    Ne t'inquiète pas, j'aurais encore besoin de toi !
    Images attachées Images attachées  
    Christian
    Nexus 1 sous Cyanogen - Acer A500

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

Discussions similaires

  1. Organisation Layout XML
    Par J.B.P dans le forum Composants graphiques
    Réponses: 0
    Dernier message: 30/06/2014, 15h04
  2. Comment créer un layout xml à partir d'une customize view ?
    Par dév20 dans le forum Composants graphiques
    Réponses: 1
    Dernier message: 02/02/2014, 03h40
  3. Evènement bouton pour accéder à un layout.xml
    Par LamyaeRida dans le forum Composants graphiques
    Réponses: 3
    Dernier message: 03/12/2012, 22h04
  4. Faire un include dans un layout XML
    Par Paul015 dans le forum Composants graphiques
    Réponses: 6
    Dernier message: 02/12/2011, 21h37
  5. Lancer un fichier XML
    Par isma44 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 07/07/2008, 20h50

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