2010-09-04 16 views
4

J'ai 1 activité, mais j'aimerais avoir plusieurs menus contextuels pour différents composants de l'interface utilisateur.Comment créer plusieurs menus contextuels?

Par exemple, j'ai un ListView qui réagira à:

@Override 
    public void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) { 

     super.onCreateContextMenu(menu, v, menuInfo); 
     menu.setHeaderTitle("Selection Options"); 
     menu.add(0, v.getId(), 0, "Remove"); 
    } 

Comment puis-je créer un autre menu contextuel pour l'événement onClick pour un ImageView je?

Répondre

10

En fait, cette méthode consiste à modifier dynamiquement le menu d'options. Pour créer plusieurs menus contextuels, vous devez les définir dans votre méthode onCreateContextMenu. Comme vous pouvez le voir, cette méthode reçoit un paramètre View as, qui est la vue sur laquelle vous avez cliqué pour faire apparaître le menu. Donc vous gardez la méthode que vous avez pour votre ListView, et vous ajoutez quelques conditions pour différencier votre Views. Ensuite, vous utilisez ces conditions pour créer le Context Menu voulu. Les menus contextuels ne supportent pas les icônes, donc si vous voulez des icônes, des images ou quelque chose de similaire, vous devrez soit utiliser un menu d'options que vous modifiez dynamiquement, ou créer un menu personnalisé avec une vue personnalisée, les intentions et tout.

+0

comment puis-je déterminer si v est un ListView ou si v est un ImageView? –

+1

dans Android, vous pouvez ajouter des balises aux vues, il vous suffit donc d'utiliser getTag sur la vue. Vous pouvez également utiliser l'identifiant de la vue si vous le connaissez. – Sephy

+0

bénisse Sephy! "Comme vous pouvez le voir, cette méthode reçoit un paramètre View as, qui est la vue sur laquelle vous avez cliqué pour faire apparaître le menu." Cette ligne m'a sauvé! – Ashwani

-5
@Override 
public boolean onPrepareOptionsMenu(Menu menu) 
{ 
    // TODO Auto-generated method stub 
    return super.onPrepareOptionsMenu(menu); 
} 

Vous pouvez vérifier vos conditions avec cette méthode. Ceci sera déclenché avant que le menu ne soit visible par l'utilisateur.

+0

Quelle condition vérifier? –

+0

garder un drapeau ou quelque chose si l'utilisateur avait cliqué sur l'image si oui alors afficher votre menu affiché là sinon afficher le normal – DeRagan

+2

l'OP a posé des questions sur les menus contextuels - votre méthode est pour les menus d'options. – CommonsWare

2

Vous pouvez utiliser tags.

Avant l'enregistrement dans le menu contextuel pertinent, définissez une étiquette sur votre rootView:

private static final Integer CONTEXT_MENU_YOUR_ACTION = 1; //indicator of the current context menu type 

// register for your context menu 
rootView.setTag(R.id.TAG_CONTEXT_MENU_ID, CONTEXT_MENU_YOUR_ACTION); 
registerForContextMenu(rootView); 
rootView.showContextMenu(); 
unregisterForContextMenu(rootView); 

Ensuite, à l'intérieur onCreateContextMenu vous pouvez vérifier l'étiquette en cours sur votre rootView:

Integer contextMenuId = (Integer) rootView.getTag(R.id.TAG_CONTEXT_MENU_ID); 

if (CONTEXT_MENU_YOUR_ACTION.equals(contextMenuId)) { 
    //custom your context menu 
} 

La même vérification est pertinent pour la méthode onContextItemSelected.