2011-01-09 6 views

Répondre

4

Compris! Il n'était pas évident que le menuInfo était nécessairement un AdapterContextMenuInfo (qui a la position).

@Override 
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { 
    super.onCreateContextMenu(menu, v, menuInfo); 
    MenuInflater inflater = getMenuInflater(); 
    if (((AdapterContextMenuInfo)menuInfo).position == 1) { 
     inflater.inflate(R.menu.foo1, menu); 
     return; 
    } 
    inflater.inflate(R.menu.foo2, menu); 
} 
1

Je n'ai pas essayé ceci mais cela peut fonctionner. ListView étend ViewGroup de sorte que lorsqu'un ListView est «long-cliqué», l'écouteur doit être passé quelle vue enfant est sous le clic long.

Créez votre propre classe ListView qui implémente onLongClickListener puis vérifiez si la vue est votre en-tête ou pied de page et, si oui, renvoyez 'true' pour montrer que le clic long a été 'consommé' et pour indiquer d'autres mesures devraient être prises.

protected MyListView extends ListView 
    implements onLongClickListener { 

    public boolean onLongClick (View v) { 
     boolean longClickConsumed = false; 

     // Check if v is either your Header or Footer 
     // if so then set longClickConsumed to be true 

     return longClickConsumed; 
    } 
} 
0

This réponse est presque bon, le problème qui est que le clic long de ne pas annulé, il a juste un autre comportement. De plus, ne rien faire, va dérouter l'utilisateur, car l'interface utilisateur agira comme s'il y avait un long clic mais rien ne se passerait.

La solution est très simple.

  1. cliquez sur Désactiver la fois régulière et à long clic en ajoutant l'en-tête/pied de page avec cette fonction listView.addFooterView(footer, null, false);
  2. Réglez l'écoute cliquez manuellement sur l'en-tête/pied de page
Questions connexes