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 :

Programmer un menu de filtres avec un contenu variable


Sujet :

Composants graphiques Android

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Février 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 14
    Points : 7
    Points
    7
    Par défaut Programmer un menu de filtres avec un contenu variable
    Bonjour,

    Je développe une application qui communique avec une database et permet pour le moment d'afficher différents contenus dans une listview.
    Plus précisément, j'ai un menu principal avec plusieurs boutons (chacun correspondant à une famille d'éléments - "Fast Food" "Restaurants" "Coffee Shops" etc.) ; chaque bouton renvoie à la même activité (une listview vide appelée ResultListViewActivity) et envoie une requête différente à la base de donnée pour afficher un contenu différent.

    Donc si je clique sur Restaurants, mon activité "ResultListViewActivity" s'ouvre et affiche tous les éléments restaurants de ma database, etc.

    Voila maintenant ce que je veux faire : je souhaite programmer un menu pour mon activité "ResultListViewActivity" de telle sorte que le contenu de ce menu varie selon le bouton cliqué. Il s'agirait d'un menu de filtres : si je clique par exemple sur le bouton "Restaurants", le contenu de ce menu deviendrait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Type de cuisine :
    O Asiatique
    O Française
    O Italienne
    O Grecque 
    O etc.
    Mais si je clique sur "Coffee Shop", on aurait alors :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Type de lieu :
    O Salon de thé
    O Café
    Chacun de ces items enverrait une requête différente pour filtrer les résultats de la listview.

    Je souhaite avoir un menu pratique et facile d'utilisation, par exemple avec un bouton "Filtre" dans une actionbar qui déploierait un sous menu lors d'un clic.
    Mon problème est que j'utilise déjà une action bar, que j'ai fixé au bas de mon écran avec des items qui restent les mêmes durant la navigation. D'après mes recherches, j'ai l'impression qu'il m'est impossible de rajouter une action bar en haut de mon écran, qui plus est avec un contenu variable en fonction des boutons cliqués.

    Ma question est ouverte, j'aimerais savoir quels outils sont disponibles pour avoir programmatiquement un sous menu attitré à une seule et même activité mais dont le contenu et les fonctions associées aux items varieront ?

    Je pense par exemple à un bouton fixe défini dans mon activité et ouvrant une fenêtre qui ressemblerait à ça :


    Merci d'avance pour vos conseils, toute piste me serait utile !

  2. #2
    Expert éminent

    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
    Points : 9 149
    Points
    9 149
    Par défaut
    Bonjour,

    Tu devrais regarder de ce côté :
    http://developer.android.com/guide/t...l#context-menu

    ou par les popup:
    http://developer.android.com/guide/t...html#PopupMenu

    on peut choisir le menu a afficher en fonction de la view appelante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.context_menu, menu);
    Responsable Android de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Android, consulter la page cours
    N'hésitez pas à consulter la FAQ Android et à poser vos questions sur les forums d'entraide mobile d'Android.

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Février 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 14
    Points : 7
    Points
    7
    Par défaut
    Merci pour les liens, ils sont bien utiles !
    J'ai finalement fait le choix d'un simple bouton (plutôt qu'un item d'une action bar placé en haut de mon écran) pour ouvrir les différents menus.

    Donc maintenant, quand je clique sur mon bouton "Filtre", selon le bouton cliqué dans l'activité précédente, j'ai le menu approprié qui s'ouvre.
    Par exemple, quand je clique dans le bouton "Restaurants" dans l'activité précédente, si je clique sur le bouton Filtre j'ai une liste de différentes cuisines. Si au contraire j'ai cliqué sur le bouton "Loisirs", j'ai une liste de types de loisirs différents.

    Par contre je bloque depuis plusieurs heures sur l'assignation des events pour mes items. J'ai mis dans mon code un listener unique pour chaque popUpMenu (listener_1, listener_2, etc.) mais maintenant je n'arrive pas à utiliser onMenuItemClick() pour définir mes actions. Je ne sais pas ou spécifié que je fais référence à un menu pop up en particulier (via listener_2 par exemple).

    Voila mon code:
    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
    private void showPopupMenu(View v) {
     
    		Bundle bundle = getIntent().getExtras();
    		int filterVariable = bundle.getInt("filterVariable");
    		switch (filterVariable) {
    		case 11:
    			PopupMenu myPopupMenu1 = new PopupMenu(ResultListViewActivity.this,
    					v);
    			myPopupMenu1.getMenuInflater().inflate(R.menu.popupmenu,
    					myPopupMenu1.getMenu());
    			myPopupMenu1.setOnMenuItemClickListener(listener_1);
    			myPopupMenu1.show();
    			break;
    		case 12:
    			PopupMenu myPopupMenu2 = new PopupMenu(ResultListViewActivity.this,
    					v);
    			myPopupMenu2.getMenuInflater().inflate(R.menu.popupmenu2,
    					myPopupMenu2.getMenu());
    			myPopupMenu2.setOnMenuItemClickListener(listener_2);
    			myPopupMenu2.show();
    			break;
    //et ainsi de suite ...
    		}
    	}
    Donc par exemple, case11 correspond à un clic sur "Restaurant", case12 à "Losirs"... mais comment faire pour que les items des menu pop up Restaurant ou Loisir soient assignés à des events différents ?
    Merci pour les pistes!

    [Edit] Un peu plus de détails :

    Pour vraiment que ce soit le plus clair possible, le seul truc sur lequel je bloque, c'est l'intégration de ce bloc de code dans mon programme, sachant qu'il y a un bloc de ce genre pour chacun des cas (case 11, case12, etc.). Cela correspond aux actions associées à chacun des items d'un menu précis:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    @Override
    public boolean onMenuItemClick(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.menu1item1:
                // .......
                return true;
            case R.id.menu1item2:
               // .........
                return true;
            default:
                return false;
        }
    }
    J'essaie des tas de combinaisons différentes, ça ne marche jamais et je ne trouve aucun exemple similaire sur le net.
    Merci infiniment à celui ou celle qui m'apportera le petit truc qui manque pour associer à chacun de mes menu popup des listeners différents.

  4. #4
    Expert éminent

    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
    Points : 9 149
    Points
    9 149
    Par défaut
    Bonjour,

    Si vraiment tu ne veux pas utiliser le onMenuItemClick(MenuItem item), alors tu peux redéfinir les listener de chaque PopupMenu
    http://developer.android.com/referen...ClickListener)

    via la fonction setOnMenuItemClickListener.
    Responsable Android de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Android, consulter la page cours
    N'hésitez pas à consulter la FAQ Android et à poser vos questions sur les forums d'entraide mobile d'Android.

  5. #5
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Février 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 14
    Points : 7
    Points
    7
    Par défaut
    En fait je n'ai pas d'à priori pour l'une ou l'autre méthode, il se trouve juste que ça ne marche jamais. Par exemple, la méthode que tu suggères, je l'ai essayée (en m'inspirant de l'écriture des listener pour les boutons), de cette façon :
    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
     
    case 12:
    			PopupMenu myPopupMenu2 = new PopupMenu(ResultListViewActivity.this,
    					v);
    			myPopupMenu2.getMenuInflater().inflate(R.menu.popupmenu2,
    					myPopupMenu2.getMenu());
    			myPopupMenu2.setOnMenuItemClickListener(listener_2) {
    				private OnMenuItemClickListener listener_2 = new OnMenuItemClickListener() {
     
    					@Override
    					public boolean onMenuItemClick(android.view.MenuItem item) {
    						switch(item.getItemId()) {
    						case R.id.menu1:
    							Toast.makeText(getApplicationContext(),
    									"Chinese Food", Toast.LENGTH_SHORT)
    									.show();
    							return true;
     
    						case R.id.menu2:
    							Toast.makeText(getApplicationContext(),
    									"Italian Food", Toast.LENGTH_SHORT)
    									.show();
    							return true;
     
    						}
    						return false;
    					}
    				};
    			}
    			myPopupMenu2.show();
    			break;
    Le but est donc d'assigner (juste pour voir si ça marche) des toasts aux items de mon menu popup 2 (celui correspondant à "Restaurants"). Il me souligne en rouge le premier "listener_2" en me disant "listener_2 cannot be resolved to a variable". Mais ça me dépasse, depuis quand un listener est une variable? Quand j'assigne des listeners à des boutons jamais il ne m'est demandé de les déclarer, les assigner à une valeur initiale, etc. Quand j'essaie les solutions proposées, ça règle un problème pour en créer un autre.

    Je suis vraiment perdue et pas moyen de trouver le moindre exemple sur le net traitant d'un truc similaire...

  6. #6
    Expert éminent

    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
    Points : 9 149
    Points
    9 149
    Par défaut
    Plus comme cela :

    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
    myPopupMenu2.setOnMenuItemClickListener( new OnMenuItemClickListener() {
     
    					@Override
    					public boolean onMenuItemClick(android.view.MenuItem item) {
    						switch(item.getItemId()) {
    						case R.id.menu1:
    							Toast.makeText(getApplicationContext(),
    									"Chinese Food", Toast.LENGTH_SHORT)
    									.show();
    							return true;
     
    						case R.id.menu2:
    							Toast.makeText(getApplicationContext(),
    									"Italian Food", Toast.LENGTH_SHORT)
    									.show();
    							return true;
     
    						}
    						return false;
    					}
    				};
    			}
    Responsable Android de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Android, consulter la page cours
    N'hésitez pas à consulter la FAQ Android et à poser vos questions sur les forums d'entraide mobile d'Android.

  7. #7
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Février 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 14
    Points : 7
    Points
    7
    Par défaut
    Merci beaucoup Feanorin, c'est parfait !

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

Discussions similaires

  1. pb avec DataGridViewComboBoxColumn à contenu variable
    Par olive-andre dans le forum Windows Forms
    Réponses: 4
    Dernier message: 19/05/2013, 12h45
  2. [XHTML 1.1] Frame ? Menu et bandeau fixe et contenu variable
    Par kacedda dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 26/11/2011, 19h27
  3. [XL-2003] Boucle avec le contenu d'un filtre
    Par rico63 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 20/08/2010, 15h18
  4. Filtre avec menu déroulant
    Par p.vassort dans le forum Débuter
    Réponses: 8
    Dernier message: 05/08/2009, 17h51
  5. Remplir un menu déroulant avec le contenu d'un XML
    Par ibson76 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 09/09/2008, 15h57

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