2012-03-18 17 views
7

特定的ListView項的上下文菜單我知道這個問題以前問,回答是覆蓋onPrepareContextMenu()/ onCreateContextMenu()。但我不明白,沒有得到任何解決方案。請幫助我如何禁用特定ListView項目的上下文菜單。如何禁用Android的

+0

覆蓋onPrepareContextMenu()和做當前選擇列表中的位置的檢查ICH曾經邏輯有一個布爾標誌刪除菜單中的所有項目=勝利。 – Blundell 2012-03-18 16:34:42

+0

你可以更具體瞭解這一點,我的意思是我需要一個示例代碼來清楚地理解它。我無法弄清楚如何從菜單中刪除特定列表項目的所有項目。 – 2012-03-18 17:01:58

回答

5

打開上下文菜單取決於你的一些邏輯。例如,在方法onItemClick(在你的listView中)你應該檢查你的項目的內容,並顯示或不顯示上下文菜單。我不明白,爲什麼這是你的問題?

UPDATE

public class ExampleActivity extends ListActivity { 

    private ListView mListView; 
    private ArrayList<String> mList = new ArrayList<String>(); 
    private ArrayAdapter<String> mArrayAdapter; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     mArrayAdapter = new ArrayAdapter<String>(this, android.R.id.list ,mList); 
     mListView = (ListView) findViewById(android.R.id.list); 
     setListAdapter(mArrayAdapter); 
     registerForContextMenu(mListView); 

     mListView.setOnItemLongClickListener(new OnItemLongClickListener() { 

      @Override 
      public boolean onItemLongClick(AdapterView<?> adapterView , View v,int position, long id) { 
       mListView.getItemAtPosition(position); //check current item with your logic and show or don't show contextMenu 
       // for example I will show 
       mListView.showContextMenu(); //to show 
       return true; 
      } 
     }); 
    } 

    @Override 
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { 
     // add contextmenu items 
     super.onCreateContextMenu(menu, v, menuInfo); 
    } 

    @Override 
    public boolean onContextItemSelected(MenuItem item) { 
     // todo some logic... 
     return super.onContextItemSelected(item); 
    } 

}

可能它會幫助你......好運氣......

+0

在的onCreate(),我註冊我的registerForContextMenu(列表視圖)。而在onListItemClick(ListView中L,視圖V,INT位置,長的ID),我應該如何啓用/禁用特定列表項的列表視圖。假設在ListView中取第一項。我應該如何編寫啓用/禁用代碼之後 - listview.getItemAtPosition(0)。 ? – 2012-03-18 17:11:02

+0

當你調用showContextMenu()方法時,你的contextMenu將顯示。你會檢查你的項目,如果你需要顯示contextMenu你會打電話給showContextMenu()和其他方式,你不會叫它。問題是什麼? – 2012-03-18 17:15:58

+0

在onListItemClick(ListView l,View v,int position,long id)方法中有「int position」參數。它是您當前點擊項目的位置。您可以通過getItemAtPosition(INT位置)檢查項目,並做一些事情... – 2012-03-18 17:41:13

1

您也可以重新註冊的ListView這將導致你的onCreateContextMenu方法再次執行

ListView lv = (ListView) findViewById(R.id.lvExample); 
registerForContextMenu(lv); 

然後你可以隱藏或顯示菜單項與wh要在onCreateContextMenu方法

+0

我買這個。我不認爲搞亂'OnItemLongClickListener'是個好主意。 – Yeung 2013-09-27 04:19:47