如何实现由长单击或点击上正在使用内置的布局和ListAdapter一个ListActivity触发的上下文菜单?
Answer 1:
在onCreate方法调用registerForContextMenu是这样的:
registerForContextMenu(getListView());
然后填充上的菜单onCreateContextMenu(文本菜单菜单,查看视图,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的,因此该项目通过调用选择的ID getMenuInfo() :
try {
info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
} catch (ClassCastException e) {
Log.e(TAG, "bad menuInfo", e);
return false;
}
long id = getListAdapter().getItemId(info.position);
Answer 2:
你也应该看看Activity.registerForContextMenu(查看) 。
Answer 3:
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;
}
文章来源: How do you implement context menu in a ListActivity on Android?