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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Menu contextuel et Menu d'options
    Salut à tous,

    Alors volà j'ai un programme avec deux activity, j'ai crée le même menu d'option pout les deux activité. Et j'ai crée un menu contextuel sur ma première activité que s'affiche lorsque je clique sur un item de ma listview.. enfin ça c'est la théorie.

    Mon problème c'est que je voulais afficher ma deuxième activité avec un OnLongClick sur ma listview (ça ça marche), et le menu contextuel avec un OnClick (donc un click court) et le problème et là ... de plus lorsque j'effectue le clic long, j'ai bien ma deuxième activité qui se lance, mais aussi le menu contextuel, cependant j'ai juste le temps de l'apparcevoir et de passer dans ma nouvelle activité. Gràce à un retour en arrière je reviens sur ma première activité et vois mon menu contextuel affiché.
    Ce n'est donc pas trés pratique même si cela montre qu'il n'y a pas d'erreur dans mon code.

    Je me suis donc dit je vais inversé et lancer ma 2éme activity sur un clic court et le menu contextuel sur un clic long .... ma 2éme activité se lance toujours aussi bien, par contre pas de menu contextuel.

    j'ai lu sur d'autre forum que le fait d'avoir un menu d'option empécher l'apparition de mon menu contextuel est-ce vrai?
    La solution proposé était de mettre tous les "case" dans un seul "switch" mais comment faire?

    voici les codes de mes deux menus:

    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
       /**-----------------------------Barre de Menu----------------------------*/
     
        public boolean onCreateOptionsMenu(Menu menu) 
        {
           super.onCreateOptionsMenu(menu);
           MenuInflater inflater = new MenuInflater(this);
           inflater = getMenuInflater();
           inflater.inflate(R.menu.menu, menu);
           return true;
        }
         public boolean onOptionsItemSelected(MenuItem item) {
             switch (item.getItemId()) {
                 case R.id.ack:Toast.makeText(this, "select an alarm", Toast.LENGTH_LONG).show();
                                     break;
     
                 case R.id.ackall:Toast.makeText(this, "Acknowledge all alarms", Toast.LENGTH_LONG).show(); 
                 ListView list = (ListView)findViewById(R.id.listalarme);
                 AlarmeAdapter adapter = (AlarmeAdapter)list.getAdapter();
                 adapter.setEtat(AlarmeAdapter.ACKKED);
                 list.invalidateViews();
                                  break;
     
                 case R.id.reset:Toast.makeText(this, "Select an alarm", Toast.LENGTH_LONG).show();
                                     break;
                 case R.id.resetall:Toast.makeText(this, "Reset all alarms", Toast.LENGTH_LONG).show(); 
                 					 break;    
                 case R.id.update:Toast.makeText(this, " alarms update", Toast.LENGTH_LONG).show();          					 break;     
             }
             return true;
         }
     
        /**---------------------------------menu contextuel-----------------------------------------*/
         public void onCreateContextMenu(ContextMenu menu_item,View v,ContextMenuInfo menuInfo) 
         {
            super.onCreateContextMenu(menu_item, v, menuInfo);
            MenuInflater inflater = getMenuInflater();
            inflater.inflate(R.menu.menu_itemlist, menu_item);
     
         }
     
         public boolean onContextItemSelected(MenuItem item){
     
             switch (item.getItemId()) {
             case R.id.ack_item:
                 Toast.makeText(this, "ack this item", Toast.LENGTH_SHORT).show();
                 return true;
                case R.id.reset_item:
                    Toast.makeText(this, "reset this item", Toast.LENGTH_SHORT).show();
                    return true;
             	}
             return super.onContextItemSelected(item);
             }
    }
    Pour lancer mon menu contextuel avec un clic court j'ai tente le code suivant, mais ça n'a pas l'air de marcher :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    	public void OnClick(ListAlarme item, int position) 
    	{
    		// TODO Auto-generated method stub
            registerForContextMenu((ListView)findViewById(R.id.listalarme));
            openContextMenu((ListView)findViewById(R.id.listalarme));
     
    	}
    Si quelqu'un a une idée du problème et par la même occasion d'une solution? Merci =)
    Dernière modification par Invité ; 01/06/2011 à 14h53.

  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,

    Que retournais tu dans la procédure onLongClick ?
    public abstract boolean onLongClick (View v)
    Since: API Level 1

    Called when a view has been clicked and held.
    Parameters
    v The view that was clicked and held.
    Returns

    * true if the callback consumed the long click, false otherwise.
    Il faut dans ton cas retourner true;

  3. #3
    Invité
    Invité(e)
    Par défaut
    voici le 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
     
        public void 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); 
       }
    Mais sur le onLongClick je lance ma deuxième activity.

    Le plus étranger c'est que la deuxième acitity et le menu contextuel se lance en même temps sur le clic long :s

    Je vais encore essayer d'inverser les clic.

  4. #4
    Invité
    Invité(e)
    Par défaut
    J'ai de plus mis en log sur mon clic court et mon programme le détecte bien, mais il ne lance pas le menu pour autant.

    Et si j'inverse mon OnClick et OnLongClick, alors mon menu et mon 2ème activité se lance sur le clic court et il ne se passe rien sur le long bien que mon programme le détecte ...

    Voici le code dans mon adapter :

    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
     
    			layoutItem.setOnClickListener(new OnClickListener(){
     
    				@Override
    				public void onClick(View v) {
    					Integer position = (Integer)v.getTag();
    					sendListener(mListA.get(position), position);
    					return;
    				}
     
    			});
    			layoutItem.setOnLongClickListener(new OnLongClickListener(){
     
    				@Override
    				public boolean onLongClick(View v) {
    					System.out.println("click long");
    					return true;
    				}
     
    			});

  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
    Essaye plutôt avec cette fonction

    public abstract boolean onItemLongClick (AdapterView<?> parent, View view, int position, long id)
    Since: API Level 1

    Callback method to be invoked when an item in this view has been clicked and held. Implementers can call getItemAtPosition(position) if they need to access the data associated with the selected item.
    Parameters
    parent The AbsListView where the click happened
    view The view within the AbsListView that was clicked
    position The position of the view in the list
    id The row id of the item that was clicked
    Returns

    * true if the callback consumed the long click, false otherwise
    et retourne true


    http://developer.android.com/referen...kListener.html

    Edit , cette fonction s'applique directement à la liste .

    donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    list.setOnItemLongClickListener(new OnItemLongClickListener() {
     
    				@Override
    				public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
    						int arg2, long arg3) {
    					// TODO Auto-generated method stub
    					return true;
    				}
    			});

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

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