0

我有两个列表视图,书签列表视图和历史列表视图,一个在另一个之上。当显示历史列表视图时,书签列表视图被隐藏,反之亦然。对于长按事件,我正在创建一个上下文菜单。长点击事件适用于历史列表视图。

现在当我长按书签列表视图中的项目时出现问题,显示历史列表视图上下文菜单而不是书签列表视图上下文菜单。

这怎么可能发生?任何想法?

下面是书签列表视图上下文菜单的代码

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() 方法?

4

1 回答 1

0

你能试试这个方法吗

@Override
public void onCreateContextMenu(ContextMenu menu, View v,ContextMenu.ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);

    if(v.getId() == R.id.cover){

    menu.setHeaderTitle("Change Cover");
    menu.add(0, v.getId(), 0, "Take Photo");
    menu.add(0, v.getId(), 0, "Choose From Library");
    }
    else if(v.getId() == R.id.Profilepic){

    menu.setHeaderTitle("Change Profile");
    menu.add(1, v.getId(), 0, "Take Photo");
    menu.add(1, v.getId(), 0, "Choose From Library");
    }


}

@Override
public boolean onContextItemSelected(MenuItem item) {
    if (item.getGroupId() == 0) {

        if(item.getTitle()=="Take Photo"){ showCoverCameraFragment(); }
        else if(item.getTitle()=="Choose From Library"){showCoverLibraryFragment();}
        else {return false;}

    } else if (item.getGroupId() == 1) {

        if(item.getTitle()=="Take Photo"){showProfileCameraFragment();}
        else if(item.getTitle()=="Choose From Library"){showProfileLibraryFragment();}
        else {return false;}
    }




    return true;
}
于 2013-12-04T09:44:07.093 回答