我有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事件创建另一个上下文菜单?
答案 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);
}
您可以在此方法中查看条件。在菜单对用户可见之前,这将被触发。