2014-02-22 183 views
0

我見過this的問題,但它並沒有幫助我。
問題是:我解析一個網站,一些職位是個人的,另一個是組職位。如果是羣組帖子,我想在上下文菜單中顯示2個菜單項 - 「顯示作者的博客」和「顯示組的頁面」,如果它只是個人帖子,則只顯示「顯示作者的博客」菜單項。更改菜單項動態

````

@Override 
    public void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo)  { 
    super.onCreateContextMenu(menu, v, menuInfo); 
    menu.add(0, 1, 0, "Open author's blog"); 
    menu.add(0, 2, 0, "Open group's page"); 
} 

@Override 
public boolean onContextItemSelected(MenuItem item) { 
    AdapterContextMenuInfo menuInfo = (AdapterContextMenuInfo)item.getMenuInfo(); 
    switch(item.getItemId()) { 
    case 1: 
     << some code >> 
     break; 
    } 
    return true; 
} 

````

我不明白,我怎麼能得到OnCreateContextMenu方法本(菜單項項)。我希望這樣我可以設置一些菜單項可見或不可見。

回答

1

你只需要以前的答案適應你的代碼。

onCreateContextMenu回調在創建ContextMenu之前觸發,並且在此回調中您需要選擇創建(或不創建)ContextMenu的項目。因此,您需要做的是檢索與適配器單元(觸發回調的單元)關聯的對象,然後根據帖子的類型以編程方式創建菜單項。

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

    AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo; 
    Post post = (Post) myListView.getItemAtPosition(info.position); 

    if (post.getPostType() == PostType.Personal) { 
     menu.add(0, 1, 0, "Show author's blog"); 
    else if (post.getPostType() == PostType.Group) { 
     menu.add(0, 1, 0, "Show author's blog"); 
     menu.add(0, 2, 0, "Show group's page"); 
    } 
} 
+0

我的上下文菜單是由listview創建的,一些元素可能是組帖子,有些是私人的。那麼,根據posttype,每次都會重新創建上下文菜單? – Groosha

+0

是的,您每次對listView的元素執行長按時,都會重新創建contextMenu。所以,你需要找到listView的哪一行被選中,找到這一行是否與一個組或一個私人帖子相關聯,然後在contextMenu中只添加你需要的項目。 – flolom

+0

太棒了!非常感謝! – Groosha

1

我不明白,我怎麼能得到 OnCreateContextMenu方法本(菜單項項)。我希望這樣我可以設置 某些菜單項可見或不可見。

爲了獲得特定MenuItem可以使用:

menu.getItem(<position>); 
menu.findItem(<id>); 

其中第一種方法使用在菜單項的位置(其計算從頂部到從零到n底部)。所以你的情況第一項(作者)具有索引0和第二有索引,如果你指定的菜單在XML文件1.

第二種方法是非常有用的 - 那麼你就可以獲取基於其ID的項目。

另外擺脫爲其顯示的菜單,你可以使用元素一些額外的信息:

AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo; 
View child = info.targetView; 

然後根據您可以顯示或隱藏文本菜單項目(S)中獲得的信息。

+0

感謝您的解釋 – Groosha