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. #41
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par malgache Voir le message
    Et t'as bien enlevé le System.out("click long" ou "click court"); des deux autres fonctions?
    euh cad? de quelles 2 autres fonctions tu parle?

  2. #42
    Membre chevronné
    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
    Par défaut
    Et les log je suppose que tu les a mis dans le onClick et onLongClick définie dans adapter?

  3. #43
    Invité
    Invité(e)
    Par défaut
    j'en ai mis dans les onclic de l'adapter et de ma classe, mais il n'y a que ceux de l'adapter que s'affiche

    --EDIT--

    voici le code complet de 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
    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
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    public class AlarmeAdapter extends BaseAdapter{
     
    	private List<ListAlarme> mListA;
    	public static int etat;
        public final static  int ACKKED = 1;
        public final static  int NO_ACKKED = 0;
     
    	private Context mContext;
    	private LayoutInflater mInflater;
    	public AlarmeAdapter(Context context, List<ListAlarme> aListA, int state) {
    		  mContext = context;
    		  mListA = aListA;
    		  mInflater = LayoutInflater.from(mContext);
    		  etat = state;
    		}
    	public int getCount() {
    		  return mListA.size();
    		}
     
    	public Object getItem(int position) {
    		  return mListA.get(position);
    		}
     
    	public long getItemId(int position) {
    		  return position;
    		}
    	public View getView(final int position, View convertView, ViewGroup parent) 
    	{
    		  LinearLayout layoutItem;
    		  if (convertView == null) {
    		    layoutItem = (LinearLayout) mInflater.inflate(R.layout.alarme_layout, parent, false);
    		  } 
    		  else 
    		  {
    		  	layoutItem = (LinearLayout) convertView;
    		  }      
    		  TextView alarmeID = (TextView)layoutItem.findViewById(R.id.alarme_id);
    		  TextView alarmeType = (TextView)layoutItem.findViewById(R.id.alarme_type);		            
    		  alarmeID.setText(mListA.get(position).idAlarme);
    		  alarmeType.setText(mListA.get(position).typeAlarme);
     
    		if (etat == ACKKED ) 
              {
            	  layoutItem.setBackgroundColor(Color.GRAY);
              } 
              else 
              {
            	  ListAlarme item = mListA.get(position);
                  if (item.genre == ListAlarme.grave){
                	  layoutItem.setBackgroundColor(Color.RED);
                  }
                 else if (item.genre == ListAlarme.defaut)
                 {
                	 layoutItem.setBackgroundColor(Color.YELLOW);
                 }          
              }
     
    		layoutItem.setTag(position);			
    		layoutItem.setOnLongClickListener(new OnLongClickListener(){
    			@Override
    			public boolean onLongClick(View v) {
    				Integer position = (Integer)v.getTag();
    				sendListener(mListA.get(position), position);
    				System.out.println("clic long gérer par l'adapter");
    				return true;
    			}
    		});
     
    		layoutItem.setOnClickListener(new OnClickListener(){				 
    			@Override
    			public void onClick(View v) {
    				System.out.println("clic court gérer par l'adapter");
    				sendListener(mListA.get(position), position);
    			}
    		});
     
    		return layoutItem;
    	}	
     
     
        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);	  	
    	}
    	public void setEtat (int nvetat) {
    		   etat = nvetat;
    	}
    }
    Mais vu que j'affiche bien les deux log que j'ai mis dans ce code, le pb vient pt maintenant de ma classe principale non?

  4. #44
    Membre chevronné
    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
    Par défaut
    Oui oui c'était juste pour savoir.

    Mais c'est normal je pense que ca passe seulement dans ceux de ton adapter, car c'est sur tes adapter que t'as définie un écouteur pour le clic court et long.

    Possible de revoir le code de ta classe principale?

  5. #45
    Invité
    Invité(e)
    Par défaut
    Bien sur :

    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
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    public class ManagementAlarm extends Activity implements AlarmeAdapterListener{
        /** Called when the activity is first created. */
    	public static boolean var = false;
     
        @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); 
            AlarmeAdapter adapter2 = new AlarmeAdapter(this, listP, 0);
            adapter2.addListener2(this);
            ListView list = (ListView)findViewById(R.id.listalarme);
            list.setAdapter(adapter);
            list.setAdapter(adapter2);
            var = false;
        }
    	@Override
    	public boolean OnLongClick(ListAlarme item, int position) 
    	{
    	//	var = true;
    	/**     System.out.println("onLongClick var =" + var);
                    
                    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); */
    		System.out.println("Long click");
    	    return false;
    	}
    	public void OnClick(ListAlarme item, int position) 
    	{
    //		if (var == false){
    		System.out.println("onClick court");
    	/**     System.out.println("itemIsclick");
            registerForContextMenu((ListView)findViewById(R.id.listalarme));
            openContextMenu((ListView)findViewById(R.id.listalarme));*/
    //		}		
    	} 
     
     
        /**-----------------------------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(); 
                                  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);
            System.out.println("oncreate");
            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);
             }
    }

  6. #46
    Membre chevronné
    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
    Par défaut
    Humm je pense que y'a pas d'appel du onClick et onLongClick de te classe principale parce que c'est des méthodes que tu implémentes via une interface crée, et ils ne sont pas lié aux autres.

    Ce qui serai surement possible vu que tu passe le context à tes adapter, c'est dans les onLongClick et onClick appeler des fonctions lancementMenuContextuel() ou infoAlarme() (je sais pas comment les appeler) et dans ces fonction tu fais le code approprié...

  7. #47
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par malgache Voir le message
    Ce qui serai surement possible vu que tu passe le context à tes adapter, c'est dans les onLongClick et onClick appeler des fonctions lancementMenuContextuel() ou infoAlarme() (je sais pas comment les appeler) et dans ces fonction tu fais le code approprié...
    Ok c'est ce que j'ai fait, mais ça ne change pas le pb en fait, vu que mon programme ne rentre toujours pas les onclick et onlongclick de ma classe principale :s, du coup je ne lance pas les fonctions que j'ai créé.

  8. #48
    Invité
    Invité(e)
    Par défaut
    En fait si je met deux adapter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
         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);
        }
    Je ne rentre pas du tout dans mes onclick et onlongclick de ma classe principal

    alors que si j'en met qu'un seul, je rentre dans les deux en même temps quelque soit le click ...

    Et je n'ai aucune idée de comment régler l'un ou l'autre des pb

  9. #49
    Membre chevronné
    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
    Par défaut
    Mais déjà toi t'en veux un seul ou deux d'adapter? Qu'on se focalise sur le bon cas ^^

  10. #50
    Invité
    Invité(e)
    Par défaut
    Je veux le cas qui marche, et le plus pratique à mettre en place

    --EDIT--

    Je ne sais pas lequel serait le mieux pour mon appli étant donné que je ne vois pas trés bien les conséquences à prendre un ou deux adapter.
    Dernière modification par Invité ; 06/06/2011 à 13h32.

  11. #51
    Membre chevronné
    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
    Par défaut
    Je pense que tu peux y arriver avec un seul et ca serai surement mieux pour n'avoir qu'une seule variable.

    Euu je pense que tu pourrai faire un truc de ce style

    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
     
    layoutItem.setOnLongClickListener(new OnLongClickListener(){
    			@Override
    			public boolean onLongClick(View v) {
    				Integer position = (Integer)v.getTag();
    				sendListener(mListA.get(position), position,true);
    				System.out.println("clic long gérer par l'adapter");
    				return true;
    			}
    		});
     
    		layoutItem.setOnClickListener(new OnClickListener(){				 
    			@Override
    			public void onClick(View v) {
    				System.out.println("clic court gérer par l'adapter");
    				sendListener(mListA.get(position), position,false);
    			}
    		});
     
    /////////////
     
     
     private ArrayList<AlarmeAdapterListener> myListListener = new ArrayList<AlarmeAdapterListener>();
        public void addListener(AlarmeAdapterListener aListener) 
        {
        	myListListener.add(aListener);
        }
    private void sendListener(ListAlarme item, int position, boolean longClick) 
        {
        	for(int i = myListListener.size()-1; i >= 0; i--) 
        	{
              if(longClick)
              {
                 myListListener.get(i).OnLongClick(item, position);
              }
              else
              {
                 myListListener.get(i).OnClick(item, position);
              }
        	}
        }

  12. #52
    Invité
    Invité(e)
    Par défaut
    ça m'a l'air d'être une idée pas mal, sauf que pour le if (longClick) j'ai creer une variable longclick boolean qui passe à true quand on fait un clique long et j'ai du me tromper quelque part parce que maintenant je n'affiche plus que le menu contextuel... mais au moins je l'affiche, on s'approche donc de la solution.

    voici ce que j'ai changé dans mes deux classes:

    classe 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
        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--) 
        	{
        		if (ManagementAlarm.longClick == true){
        		myListListener.get(i).OnLongClick(item, position);
        		} 
        		else 
        		{
        		myListListener.get(i).OnClick(item, position);
        		}    		
        	}
        }
    et dans la classe principale :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    	public boolean OnLongClick(ListAlarme item, int position) 
    	{
    		longClick = true;
    		lancementDetailAlarm(position);
    		System.out.println("Long click");
    	    return false;
    	}
    	public void OnClick(ListAlarme item, int position) 
    	{
    		longClick = false;
    		System.out.println("Click court");
    		lancementMenuContext();
    	}
    Et j'ai mis que la variable longclick revenait à false à la fin de la 2éme activité. Mais je pense qu'il y a un autre moyen de tester si on fait un clic long, il faut juste le trouver.

  13. #53
    Invité
    Invité(e)
    Par défaut
    c'est bon j'ai trouver il suffisait de rajouter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    		layoutItem.setOnLongClickListener(new OnLongClickListener(){
    			@Override
    			public boolean onLongClick(View v) {
    				ManagementAlarm.longClick = true;
    				Integer position = (Integer)v.getTag();
    				sendListener(mListA.get(position), position);
    				System.out.println("clic long gérer par l'adapter");
    				return true;
    			}
    		});
    et ça marche!!

    Merci beaucoup pour ton aide!

    --EDIT--
    En fait il n'y avait aucun changement à faire dans la classe principale, j'ai enlever les lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     longClick = true; 
    longClick = false;
    et ça marche nickel

  14. #54
    Membre chevronné
    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
    Par défaut
    Oui t'avais plus besoin des true et false dans ta classe principale ^^. Content d'avoir pu t'aider

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

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