2010-11-18 230 views
2

另一個新手問題。我有一個上下文菜單,我申請了一個ListView,它只是允許用戶上下移動項目,或刪除項目。隱藏Android上下文菜單項目

我在onContextItemSelected()中有代碼來防止事物向上移動到列表的頂部或底部等,但我寧願隱藏上下文菜單項,如果(例如)頂級項目在列表中被選中。

我認爲我需要在onCreateContextMenu中這樣做,但我不知道如何。

這裏是我的onCreateContextMenu代碼:

@Override 
public void onCreateContextMenu(ContextMenu menu, View v, 
     ContextMenuInfo menuInfo) { 
    super.onCreateContextMenu(menu, v, menuInfo); 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.mycontextmenu, menu); 
} 

謝謝
WTS

回答

2

如果上下文菜單被打開了ListViewmenuInfo將包含AdapterContextMenuInfo類型的對象,它爲您提供有關信息點擊列表中的哪個項目。如果它是第一個或最後一個項目,您可以簡單地從上下文菜單中刪除相應的條目,但我不太確定如果沒有條目留下會發生什麼情況。

+1

對於將來的搜索...使用AdapterContextMenuInfo adapterInfo =(AdapterContextMenuInfo)menuInfo; – 2010-11-18 16:43:04

+0

如果您不想根據哪一行被要求上下文來顯示特定項目的任何上下文菜單,只需在充氣菜單之前返回onCreateContextMenu()即可。 – 2011-02-02 22:16:54

11

在您的onCreateContextMenu方法中,您需要獲取您可能想隱藏的菜單項並根據列表位置將其設置爲不可見。

事情是這樣的:

AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo; 

if(info.position < 1) { 
    myLocationMenuItem = menu.findItem(R.id.myLocation); 
    myLocationMenuItem.setVisible(enable); 
} 
1

您可以禁用特定的項目,如果你想。

@Override 
     public void onCreateContextMenu(ContextMenu menu, View v, 
       ContextMenuInfo menuInfo) 
    { 
       AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo; 

       int position = info.position; 

       // use this position to decide your item clicked 

       menu.clear(); 
       menu.setHeaderTitle("Context Menu Title"); 
       String[] menuItems = getResources().getStringArray(
         R.array.menu_context); 


       for (int i = 0; i < menuItems.length; i++) 
       { 
        menu.add(Menu.NONE, i , i, menuItems[i]); 
       } 
       menu.getItem(0).setEnabled(**Conditional check**); 
       menu.getItem(1).setEnabled(**Conditional check**); 
       menu.getItem(2).setEnabled(**Conditional check**); 
    } 
3

這是一個PopupMenu以防萬一有人正在尋找它,因爲我做了一個解決方案。在這裏,我有menu佈局文件3個按鈕PopupMenu和我刪除其中的一些在某些情況下:

PopupMenu popup = new PopupMenu(this, this.actionButton); 
    popup.setOnMenuItemClickListener(this); 
    MenuInflater inflater = popup.getMenuInflater(); 
    inflater.inflate(R.menu.menu_resume_view, popup.getMenu()); 

    Menu menu = popup.getMenu(); 
    if (this.resume.isPublished()) { 
     menu.removeItem(R.id.menu_button_publish); 
    } 
    else { 
     menu.removeItem(R.id.menu_button_unpublish); 
     menu.removeItem(R.id.menu_button_update_publish_date); 
    } 

    popup.show(); 

當您使用PopupMenuonPrepareOptionsPanel不叫。所以你必須得到id的菜單項,同時創建PopupMenu並刪除那些不應該在特定情況下可用的菜單項。

+0

嗨任何想法如果我們只使用圖標,如何刪除標題空間? https://gist.github.com/mediavrog/9345938 – 2016-12-06 03:46:04