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 :

Menu contextuel et Menu d'options


Sujet :

Composants graphiques Android

  1. #21
    Invité
    Invité(e)
    Par défaut
    Désolé de répondre aussi tard,

    Je n'ai aucun warning lorsque je clique sur un item, en fait il ne se passe rien, comme si il ne détectais pas le click :s

    j'ai remis le code que j'avais au départ (cad quand j'arrivais quand même à afficher le menu contextuel, mais que ma 2éme activité se lancé en même temps du coup j'avais juste le temps de l'apercevoir)
    et j'ai quelque warning sur le log :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    06-06 06:58:25.247: WARN/ActivityManager(42): Activity pause timeout for HistoryRecord{43fa1620 com.julie/.ManagementAlarm}
    06-06 06:58:30.217: WARN/KeyCharacterMap(307): No keyboard for id 0
    06-06 06:58:30.217: WARN/KeyCharacterMap(307): Using default keymap: /system/usr/keychars/qwerty.kcm.bin

  2. #22
    Invité
    Invité(e)
    Par défaut
    Voici le code de ma classe :

    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
    33
    34
    35
    36
    37
    38
    public class ManagementAlarm extends Activity implements AlarmeAdapterListener{
     
        @Override
        public void onCreate(Bundle savedInstanceState) 
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
     
            ArrayList<ListAlarme> listP = ListAlarme.getAListOfAlarms();
            AlarmeAdapter adapter = new AlarmeAdapter(this, listP,AlarmeAdapter.NO_ACKKED);
            adapter.addListener(this); 
            ListView list = (ListView)findViewById(R.id.listalarme);
            list.setAdapter(adapter);
        }
    	@Override
    	public boolean OnLongClick(ListAlarme item, int position) 
    	{
    		String idalr = ListAlarme.getAListOfAlarms().get(position).idAlarme;
        	String typealr = ListAlarme.getAListOfAlarms().get(position).typeAlarme;
        	int genrealr = ListAlarme.getAListOfAlarms().get(position).genre;
     
          	Intent intenalr1 = new Intent();
        	intenalr1.putExtra("id", idalr); 
        	intenalr1.putExtra("type", typealr); 
        	intenalr1.putExtra("genre", genrealr); 
        	intenalr1.putExtra("Position", position);
        	intenalr1.setClass(this, DetailAlarm.class);
    	    startActivity(intenalr1); 
    	    return false;
    	}
    	public void OnClick(ListAlarme item, int position) 
    	{
    		// TODO Auto-generated method stub
    		System.out.println("itemIsclick");
            registerForContextMenu((ListView)findViewById(R.id.listalarme));
            openContextMenu((ListView)findViewById(R.id.listalarme));
     
    	}
    et voici ce que le log m'affiche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    06-06 07:08:26.756: INFO/ActivityManager(42): Displayed activity com.julie/.ManagementAlarm: 1493 ms (total 1493 ms)
    06-06 07:08:27.476: INFO/ActivityManager(42): Starting activity: Intent { cmp=com.julie/.DetailAlarm (has extras) }
    06-06 07:08:27.516: INFO/System.out(334): itemIsclick
    06-06 07:08:27.516: INFO/System.out(334): oncreate
    06-06 07:08:28.906: INFO/ActivityManager(42): Displayed activity com.julie/.DetailAlarm: 1278 ms (total 1278 ms)
    Sachant que le System.out onCreate se trouve dans le code de mon menu contextuel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
         public void onCreateContextMenu(ContextMenu menu_item,View v,ContextMenuInfo menuInfo) 
         {
            super.onCreateContextMenu(menu_item, v, menuInfo);
            System.out.println("oncreate");
            MenuInflater inflater = getMenuInflater();
            inflater.inflate(R.menu.menu_itemlist, menu_item);        
         }
    Une idée de l'origine du problème? Visiblement le click est détecté, le create du menu contextuel se lance ... mais la 2éme activité aussi =(

  3. #23
    Membre confirmé
    Homme Profil pro
    IUT Informatique
    Inscrit en
    Mars 2011
    Messages
    412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : IUT Informatique

    Informations forums :
    Inscription : Mars 2011
    Messages : 412
    Points : 486
    Points
    486
    Par défaut
    Oui visiblement c'est ca, après tu peux faire un truc tout simple.

    Tu crées une variable booléenne clickLong que tu initialise a false, et quand tu passe dans le onLongClick tu la passe à true et tu fais une vérif dans le onClick, mais bon, ca implique que si tu retourne sur cette activity, tu dois remettre le booléen à false, sinon il ne détectera jamais un onClick...

    Edit: J'ai vu dans les post précédent qu'on t'as dit de mettre un return true dans le onLongClick, mais que du coup, ca passait plus du tout dans le onClick, t'as essayé pour ce cas la de vérifier en mode debug ou avec des log ou system.out de voir si tu passe dans le onLongClick et dans le onClick??

  4. #24
    Invité
    Invité(e)
    Par défaut
    J'ai rajouté ce que tu m'a dit :
    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
    	public boolean OnLongClick(ListAlarme item, int position) 
    	{
    		var = true;
    		System.out.println("onLongClick var =" + var);
    		System.out.println("Long click");
    		String idalr = ListAlarme.getAListOfAlarms().get(position).idAlarme;
        	String typealr = ListAlarme.getAListOfAlarms().get(position).typeAlarme;
        	int genrealr = ListAlarme.getAListOfAlarms().get(position).genre;
     
          	Intent intenalr1 = new Intent();
        	intenalr1.putExtra("id", idalr); 
        	intenalr1.putExtra("type", typealr); 
        	intenalr1.putExtra("genre", genrealr); 
        	intenalr1.putExtra("Position", position);
        	intenalr1.setClass(this, DetailAlarm.class);
    	    startActivity(intenalr1); 
    	    return false;
    	}
    	public void OnClick(ListAlarme item, int position) 
    	{
    		// TODO Auto-generated method stub
    		System.out.println("onClick var =" + var);
    		System.out.println("itemIsclick");
            registerForContextMenu((ListView)findViewById(R.id.listalarme));
            openContextMenu((ListView)findViewById(R.id.listalarme));
     
    	}
    et j'ai rajouté
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ManagementAlarm.var = false;
    dans ma deuxième activité

    et voici le log:
    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
    06-06 07:41:31.386: INFO/ActivityManager(42): Displayed activity com.julie/.ManagementAlarm: 1336 ms (total 1336 ms)
    06-06 07:41:32.636: INFO/System.out(416): onLongClick var =true
    06-06 07:41:32.636: INFO/System.out(416): Long click
    06-06 07:41:32.646: INFO/ActivityManager(42): Starting activity: Intent { cmp=com.julie/.DetailAlarm (has extras) }
    06-06 07:41:32.676: INFO/System.out(416): onClick var =true
    06-06 07:41:32.676: INFO/System.out(416): itemIsclick
    06-06 07:41:32.676: INFO/System.out(416): oncreate
    06-06 07:41:33.546: INFO/ActivityManager(42): Displayed activity com.julie/.DetailAlarm: 639 ms (total 639 ms)
    06-06 07:41:38.236: WARN/KeyCharacterMap(416): No keyboard for id 0
    06-06 07:41:38.236: WARN/KeyCharacterMap(416): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
    06-06 07:41:39.933: INFO/System.out(416): onLongClick var =true
    06-06 07:41:39.933: INFO/System.out(416): Long click
    06-06 07:41:39.946: INFO/ActivityManager(42): Starting activity: Intent { cmp=com.julie/.DetailAlarm (has extras) }
    06-06 07:41:39.956: INFO/System.out(416): onClick var =true
    06-06 07:41:39.956: INFO/System.out(416): itemIsclick
    06-06 07:41:39.956: INFO/System.out(416): oncreate
    La variable reste toujours à true, mais vu que les deux se lance en même temps ça ne prouve rien si?

  5. #25
    Membre confirmé
    Homme Profil pro
    IUT Informatique
    Inscrit en
    Mars 2011
    Messages
    412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : IUT Informatique

    Informations forums :
    Inscription : Mars 2011
    Messages : 412
    Points : 486
    Points
    486
    Par défaut
    Il faudrait rajouter une ligne dans le onclick

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public void OnClick(ListAlarme item, int position) 
    	{
    if(var == false)
    {
    		// TODO Auto-generated method stub
    		System.out.println("onClick var =" + var);
    		System.out.println("itemIsclick");
            registerForContextMenu((ListView)findViewById(R.id.listalarme));
            openContextMenu((ListView)findViewById(R.id.listalarme));
    }		
    	}
    Avec ca, tu as une condition pour effectuer ou non le code du OnClick. Après, quand t'es dans ton autre activity, l'utilisateur a un moyen de revenir sur cette activity?

  6. #26
    Invité
    Invité(e)
    Par défaut
    Pour revenir à ma 1ére activity j'utilise le bouton retour d'Android.

    Avec ce que tu propose je lance ma 2éme act sur le clic court et long, et le menu contextuel ne se lance pas...

    En fait que je fasse un click long ou court mon programme ne gére que le OnLongClick (et dans les deux cas d'ailleurs)


    ---EDIT ---

    J'ai vérifié et dans ma deuxième act la variable var passe bien à false

  7. #27
    Invité
    Invité(e)
    Par défaut
    J'avais essayé d'utiliser OnItemClick plutot que OnClick mais je n'arrivais pas à afficher mon menu :s

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    		list.setOnItemClickListener(new OnItemClickListener() 
    		{
     
    			@Override
    			public void onItemClick(AdapterView<?> AlarmeAdapter, View v,int position, long id) 
    			{
    				System.out.println("itemIsclick");
    		        registerForContextMenu((ListView)findViewById(R.id.listalarme));
    		        v.showContextMenu();
    				return;
    			}
    Le log permettait de voir que mon programme ne gérer pas ce click (on n'affichait jamais le ItemIsclick)

  8. #28
    Membre confirmé
    Homme Profil pro
    IUT Informatique
    Inscrit en
    Mars 2011
    Messages
    412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : IUT Informatique

    Informations forums :
    Inscription : Mars 2011
    Messages : 412
    Points : 486
    Points
    486
    Par défaut
    Oula, je sais pas si c'est parce que j'ai pris le sujet en route, mais je suis perdu, tu veux faire quoi exactement?

  9. #29
    Invité
    Invité(e)
    Par défaut
    Euh en fait j'ai une liste d'alarme, lorsque je clique longtemps sur une des alarmes je lance une 2éme activité qui affiche des détails sur l'alarme, et pour revenir sur la liste j'utilise le bouton retour présent sur le menu android (je ne l'ai pas programmé.)
    Et je voudrais afficher un menu contextuel lorsque je fais un click court sur une des alarmes.

    Mais lorsque j'utilise le OnClick, je lance mon act et le menu en même temps, et lorsque j'utilise le OnItemClick je n'affiche pas mon menu, mais ma 2éme act ne se lance que sur le clic long

    c'est clair ou pas du tout ^^?

  10. #30
    Membre confirmé
    Homme Profil pro
    IUT Informatique
    Inscrit en
    Mars 2011
    Messages
    412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : IUT Informatique

    Informations forums :
    Inscription : Mars 2011
    Messages : 412
    Points : 486
    Points
    486
    Par défaut
    Oui oui c'est bien clair ^^.

    Et donc quand tu fais un return true à la fin de ton onLongClick, il ne lance pas le onClick, mais quand tu reviens sur ton activity et que tu fais un clic court, ton onClick n'est pas exécuté? (C'est bien ça que tu avais dit dans des post précédent?)

  11. #31
    Invité
    Invité(e)
    Par défaut
    c'est tout à fait ça

    et si je met return false, que je fasse un click court ou long je lance les deux à la fois

  12. #32
    Membre confirmé
    Homme Profil pro
    IUT Informatique
    Inscrit en
    Mars 2011
    Messages
    412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : IUT Informatique

    Informations forums :
    Inscription : Mars 2011
    Messages : 412
    Points : 486
    Points
    486
    Par défaut
    Juste pour vérifier un truc, met tout ton code du OnLongClick et du OnClick en code tu met un truc du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    @Override
    	public boolean OnLongClick(ListAlarme item, int position) 
    	{
    	System.out.println("click long");
    	    return true;
    	}
    	public void OnClick(ListAlarme item, int position) 
    	{
    		// TODO Auto-generated method stub
    		System.out.println("click court");	
    	}
    C'est pas normal que tu n'arrive pas à passer dnas le OnClick quand tu fais un return true, j'ai fait des test ça fonctionne mais bon je suis pas réellement dans le même contexte.

    Et en faite, quand tu me true, tu dis qu'il ne passe plus dans le OnClick, mais tu peux au moins refaire un clic long et repasser dans le OnLongClicl?

  13. #33
    Invité
    Invité(e)
    Par défaut
    alors que j'ai un return true ou false avec ton programme,

    il ne se passe rien sur un clic court, et je rentre dans les deux avec un clic long (j'affiche les 2 system.out.println)

    --EDIT--

    Oui je peux toujours retourner dans le onlognclick

  14. #34
    Invité
    Invité(e)
    Par défaut
    Je viens de remarquer une erreur dans mon adapter,

    J'ai changé et maintenant, que je fasse un clic long ou court je lance les deux à la fois

    voici la partie du code de mon adapter d'où vient pt le problème :

    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
    			layoutItem.setTag(position);			
    			layoutItem.setOnLongClickListener(new OnLongClickListener(){
     
    				@Override
    				public boolean onLongClick(View v) {
    					Integer position = (Integer)v.getTag();
    					sendListener(mListA.get(position), position);
    					return true;
    				}
    		  });
    			layoutItem.setOnClickListener(new OnClickListener(){
     
    				@Override
    				public void onClick(View v) {
    								Integer position = (Integer)v.getTag();
    					sendListener(mListA.get(position), position);
    					return;
    				}
    			});
     
    		    return layoutItem;
    et à la suite de ça j'ai :

    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
        private ArrayList<AlarmeAdapterListener> myListListener = new ArrayList<AlarmeAdapterListener>();
        public void addListener(AlarmeAdapterListener aListener) 
        {
        	myListListener.add(aListener);
        }
        private void sendListener(ListAlarme item, int position) 
        {
        	for(int i = myListListener.size()-1; i >= 0; i--) 
        	{
        		myListListener.get(i).OnLongClick(item, position);
        		myListListener.get(i).OnClick(item, position);
        	}
        }
     
     
    	public interface AlarmeAdapterListener 
    	{
    	  	public boolean OnLongClick(ListAlarme item, int position);
    	  	public void OnClick(ListAlarme item, int position);	  	
    	}

  15. #35
    Membre confirmé
    Homme Profil pro
    IUT Informatique
    Inscrit en
    Mars 2011
    Messages
    412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : IUT Informatique

    Informations forums :
    Inscription : Mars 2011
    Messages : 412
    Points : 486
    Points
    486
    Par défaut
    Euu pourquoi y'a

    dans ton onClick??

    Edit: Et si je me trompe pas, le code de ton OnClick et OnLongClick est le même, tu ne pourrai pas le centraliser dans une seule fonction?

  16. #36
    Invité
    Invité(e)
    Par défaut
    J'ai oublié de l'enlevé en copiant des lignes de codes, mais en l'enlevant ça ne change rien à mon pb =)

  17. #37
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par malgache Voir le message
    Et si je me trompe pas, le code de ton OnClick et OnLongClick est le même, tu ne pourrai pas le centraliser dans une seule fonction?
    Bah le truc c'est que je ne veux pas forcément que se soit le même, mais je ne sais pas quoi mettre dans le code du OnClick pour lui dire d'afficher le menu contextuel :s

  18. #38
    Invité
    Invité(e)
    Par défaut
    j'ai rajouté des log dans le OnClick et le OnLongClick de l'adapter et le log me donne pour un click court :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    06-06 08:52:48.935: INFO/System.out(482): clic court gérer par l'adapter
    06-06 08:52:48.935: INFO/System.out(482): Long click
    06-06 08:52:48.935: INFO/System.out(482): onClick court
    Et pour un clic long :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    06-06 08:52:51.158: INFO/System.out(482): Long click
    06-06 08:52:51.158: INFO/System.out(482): onClick court
    06-06 08:52:51.158: INFO/System.out(482): clic long gérer par l'adapter

  19. #39
    Membre confirmé
    Homme Profil pro
    IUT Informatique
    Inscrit en
    Mars 2011
    Messages
    412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : IUT Informatique

    Informations forums :
    Inscription : Mars 2011
    Messages : 412
    Points : 486
    Points
    486
    Par défaut
    Hey ben c'est vraiment space, au début je voulais dire que pour mon cas, ca fonctionnait surement parce que je testais en faisant une déclaration anonyme mais tu fais pareil. Et t'as bien enlevé le System.out("click long" ou "click court"); des deux autres fonctions?

  20. #40
    Invité
    Invité(e)
    Par défaut
    J'ai changer le code de mon adapter par :

    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 ArrayList<AlarmeAdapterListener> myListListener = new ArrayList<AlarmeAdapterListener>();
        public void addListener(AlarmeAdapterListener aListener) 
        {
        	myListListener.add(aListener);
        }
        private ArrayList<AlarmeAdapterListener> mySecondListListener = new ArrayList<AlarmeAdapterListener>();
        public void addListener2(AlarmeAdapterListener aListener2) 
        {
        	mySecondListListener.add(aListener2);
        }
        private void sendListener(ListAlarme item, int position) 
        {
        	for(int i = myListListener.size()-1; i >= 0; i--) 
        	{
        		myListListener.get(i).OnLongClick(item, position);
        		mySecondListListener.get(i).OnClick(item, position);
        	}
        }
     
    	public interface AlarmeAdapterListener 
    	{
    	  	public boolean OnLongClick(ListAlarme item, int position);
    	  	public void OnClick(ListAlarme item, int position);	  	
    	}
    et celui de ma classe principale par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
            ArrayList<ListAlarme> listP = ListAlarme.getAListOfAlarms();
            AlarmeAdapter adapter = new AlarmeAdapter(this, listP,AlarmeAdapter.NO_ACKKED);
            adapter.addListener(this); 
            AlarmeAdapter adapter2 = new AlarmeAdapter(this, listP, 0);
            adapter2.addListener2(this);
            ListView list = (ListView)findViewById(R.id.listalarme);
            list.setAdapter(adapter);
            list.setAdapter(adapter2);
    Mais le log ne m'affiche plus que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     06-06 09:02:00.045: INFO/System.out(597): clic court gérer par l'adapter
    06-06 09:02:01.547: INFO/System.out(597): clic long gérer par l'adapter
    selon que je fais un clic long ou court, les deux sont donc bien différenciés dans l'adpater, mais je ne lance plus ni l'activité ni mon menu depuis les onclic et onlongclic de ma classe principale

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 3 PremièrePremière 123 DernièreDernière

Discussions similaires

  1. Ajouter un menu et sous menu suite au menu popup Profile As
    Par kkt8 dans le forum Eclipse Platform
    Réponses: 7
    Dernier message: 12/04/2013, 14h57
  2. Sous-menu via le menu contextuel
    Par foolib dans le forum Windows 7
    Réponses: 8
    Dernier message: 13/07/2010, 18h01
  3. Créer un sous menu dans le menu contextuel clique droit
    Par koKoTis dans le forum Windows XP
    Réponses: 1
    Dernier message: 11/10/2007, 12h17
  4. Supprimer option menu contextuel
    Par flo_flo dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 15/05/2007, 17h59
  5. [Plugin] Ajouter une option au menu contextuel ?
    Par relivio dans le forum Eclipse Platform
    Réponses: 2
    Dernier message: 22/03/2004, 16h18

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