在列表页面(ListView)的弹出菜单中,有的时候我们需要用到子菜单,今天在使用的过程中发现,当我们需要获取ContextMenuInfo并取 得一些列表项(list Item)信息,当菜单为子菜单的时候,调用item.getMenuInfo()返回空值null。如下所示:
1. [代码][Java]代码
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
menu.setHeaderTitle("操作");
menu.add(0, VIEW_ID, 0, "查看全文");
menu.add(0, DELETE_ID, 0, "删除");
SubMenu submenu = menu.addSubMenu(1,SHARE,0,"分享");
submenu.add(2,SHARE1,0,"短信分享");
submenu.add(2,SHARE2,0,"Gmail分享");
super.onCreateContextMenu(menu, v, menuInfo);
}
@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
RSSItem rssItem = (RSSItem) getListAdapter().getItem(info.position);
}
2. [代码]解决办法
private AdapterContextMenuInfo selectedMenuInfo = null;
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
menu.setHeaderTitle("操作");
menu.add(0, VIEW_ID, 0, "查看全文");
menu.add(0, DELETE_ID, 0, "删除");
SubMenu submenu = menu.addSubMenu(1,SHARE,0,"分享");
submenu.add(2,SHARE1,0,"短信分享");
submenu.add(2,SHARE2,0,"Gmail分享");
selectedMenuInfo = (AdapterContextMenuInfo) menuInfo;
super.onCreateContextMenu(menu, v, menuInfo);
}
@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
if(info == null){
info = selectedMenuInfo;
}
RSSItem rssItem = (RSSItem) getListAdapter().getItem(info.position);
}