簡體   English   中英

Android ListView-長按顯示錯誤的上下文菜單

[英]Android listview - on long click shows wrong contextmenu

我有兩個列表視圖,書簽列表視圖和歷史列表視圖,一個在另一個之上。 當顯示歷史列表視圖時,書簽列表視圖被隱藏,反之亦然。 對於長按事件,請創建一個上下文菜單。 長按事件可以與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()方法?

你可以嘗試這種方法

@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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM