如何创建多个上下文菜单?

时间:2010-09-04 07:11:41

标签: android listview menu contextmenu imageview

我有1个活动,但希望有不同UI组件的多个上下文菜单。

例如,我有一个ListView,它将对:

做出反应
@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");  
    }  

如何为我拥有的ImageView的onClick事件创建另一个上下文菜单?

3 个答案:

答案 0 :(得分:10)

实际上,此方法是动态更改选项菜单。要创建多个上下文菜单,您必须在方法onCreateContextMenu中定义它们。如您所见,此方法接收View as参数,即您单击的View以显示菜单。因此,您保留了ListView的方法,并添加了一些条件来区分Views。然后,您可以使用这些条件来创建所需的Context Menu

注意:上下文菜单不支持图标,因此如果您需要图标,图像或类似内容,则必须使用动态更改的选项菜单,或创建带有图标的自定义菜单。自定义视图,意图和一切。

答案 1 :(得分:2)

您可以使用tags

在注册相关上下文菜单之前,请在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);

然后在onCreateContextMenu内,您可以检查rootView上的当前标记:

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

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

相同的检查与onContextItemSelected方法相关。

答案 2 :(得分:-5)

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

您可以在此方法中查看条件。在菜单对用户可见之前,这将被触发。