2009-01-11 62 views

回答

73

在onCreate方法调用registerForContextMenu这样的:

registerForContextMenu(getListView()); 

,然后填充上onCreateContextMenu(ContextMenu menu, View view, ContextMenuInfo menuInfo)菜单。该menuInfo参数可以提供关于该项目是长期的点击这样的信息:

AdapterView.AdapterContextMenuInfo info; 
try { 
    info = (AdapterView.AdapterContextMenuInfo) menuInfo; 
} catch (ClassCastException e) { 
    Log.e(TAG, "bad menuInfo", e); 
    return; 
} 
long id = getListAdapter().getItemId(info.position); 

,你通常的方式调用menu.add添加菜单项:

menu.add(0, MENU_ITEM_ID, 0, R.string.menu_string); 

当用户拿起一个选项,onContextItemSelected被调用。同样onMenuItemSelected,这个事实在文档中没有明确解释,除了说你使用其他方法接收来自上下文菜单的调用;请注意,不要共享ID。

在onContextItemSelected你可以得到阿霍德的MenuInfo的,因此通过调用getMenuInfo()选择的项目的ID:

try { 
    info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo(); 
} catch (ClassCastException e) { 
    Log.e(TAG, "bad menuInfo", e); 
    return false; 
} 
long id = getListAdapter().getItemId(info.position); 
+1

啊,谢谢。一直在网上寻找,但只能找到旧版本。这个与蛋糕完美搭配。 – 2009-04-23 11:51:12

5
listView = (ListView) findViewById(R.id.listpockets); 
registerForContextMenu(listView); 



public void onCreateContextMenu(android.view.ContextMenu menu, View v, android.view.ContextMenu.ContextMenuInfo menuInfo) { 
    //AdapterContextMenuInfo info = (AdapterContextMenuInfo)menuInfo; 
    menu.setHeaderTitle(getString(R.string.titleDelete)); 
    menu.add(0, CommonUtil.CONTEXT_MENU__DELETE_ID, 0, getString(R.string.menuDelete)); 
}; 
@Override 
public boolean onContextItemSelected(MenuItem item) { 

    if(item.getItemId() == CommonUtil.CONTEXT_MENU__DELETE_ID) 
    { 
     AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); 
     long id = this.listView.getItemIdAtPosition(info.position); 
     Log.d(TAG, "Item ID at POSITION:"+id); 
    } 
    else 
    { 
     return false; 
    } 
    return true; 
}