【发布时间】:2013-11-06 12:23:54
【问题描述】:
我有两个列表视图,书签列表视图和历史列表视图,一个在 另一个之上。当 historylistview 时 Bookmarklistview 被隐藏 显示,反之亦然。对于长点击事件,我正在创建一个 上下文菜单。长点击事件与 historylistview 配合得很好。
现在当我长按书签列表视图中的项目时出现问题, 显示历史列表视图上下文菜单而不是书签列表视图 上下文菜单。
怎么会这样?有什么想法吗?
以下是书签列表视图上下文菜单的代码
public void onCreateContextMenuBookmark(ContextMenu menu, View v, ContextMenuInfo menuInfo){
super.onCreateContextMenu(menu, v, menuInfo);
menu.setHeaderTitle("Delete Bookmark?");
menu.add(1, 1, 1, "Delete");
menu.add(1, 2, 2, "Cancel");
}
public boolean onContextItemSelectedBookmark(MenuItem item){
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
if(item.getTitle() == "Delete"){
// delete item
}else if(item.getTitle() == "Cancel"){
}
return false;
}
下面是historylistview上下文菜单的代码
public void onCreateContextMenuHistory(ContextMenu menu, View v, ContextMenuInfo menuInfo){
super.onCreateContextMenu(menu, v, menuInfo);
menu.setHeaderTitle("Delete History?");
menu.add(1, 1, 1, "Delete");
menu.add(1, 2, 2, "Cancel");
}
@Override
public boolean onContextItemSelected(MenuItem item){
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
if(item.getTitle() == "Delete"){
// delete item
}else if(item.getTitle() == "Cancel"){
}
return false;
}
好的,我发现我可以为两个视图使用一个上下文菜单,就像这样
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo)
{
super.onCreateContextMenu(menu, v, menuInfo);
switch(v.getId()){
case R.id.history_listView:
menu.setHeaderTitle("Delete History?");
menu.add(0, v.getId(), 0, "Delete");
menu.add(0, v.getId(), 0, "Cancel");
break;
case R.id.bookmark_listView:
menu.setHeaderTitle("Delete Bookmark?");
menu.add(0, v.getId(), 0, "Delete");
menu.add(0, v.getId(), 0, "Cancel");
}
}
但是如何为每个视图调用两个不同的 onContextItemSelected() 方法呢?
【问题讨论】:
-
应该有
item.getTitle().equals("Delete")而不是item.getTitle() == "Delete" -
您是否一次只显示一个列表视图。如果是这样,那么出于隐藏目的,您应该使用 View.GONE 而不是 View.INVISIBLE
-
@ChintanRathod 但是同样的代码可以在 historylistview 上正常工作。
-
@BharatSharma 好吧,我使用的是 View.INVISIBLE,但将其更改为 View.GONE 也有帮助。
标签: android android-listview android-contextmenu