2010-10-25 29 views
4

我正在創建一個帶有ListView的簡單對話框。我想能夠訪問它上下文菜單。 這裏是基本的代碼中,我:onContextItemSelected從未使用帶有ListView的對話框調用

<On CreateDialog> 
listViewSongs=(ListView) layout.findViewById(R.id.ListView_Songs); 
listViewSongs.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, drawingPanel.metronome.getSongNames())); 

registerForContextMenu(listViewSongs); 

然後我只需添加一個簡單的項目:

@Override 
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) 
{ 
    super.onCreateContextMenu(menu, v, menuInfo); 
menu.setHeaderTitle("Sample Context Menu"); 
    menu.add(0, MENU_EDIT_SONG, 0, "Edit"); 
} 

最後我重寫onContextItemSelected:

@Override 
public boolean onContextItemSelected(MenuItem item) { 
super.onContextItemSelected(item); 
    editSong(); 
    return true; 
} 

所以我的問題是,當我長按listview我得到的上下文菜單,但在點擊它的唯一選項後,它從來沒有調用onContextItemSelected :( 任何幫助?

PS:我也試着重寫onMenuItemSelected,onOptionsItemSelected,但我得到了相同的結果:\從來沒有被調用過。

+0

這聽起來像你想要一個活動而不是一個對話框。 – Falmarri 2010-10-25 17:41:03

+0

你爲什麼要調用super.onOptionsItemSelected(item);從onContextItemSelected?你是如何確定onContextItemSelected從未被調用的?斷點?日誌記錄?你看看logcat中是否有任何錯誤? – 2010-10-25 17:42:20

+0

@Mayra:對不起這是一個錯字,它不是super.onOptionsItemSelected,而是onContextItemSelected,在代碼中它很好。我只是編輯它。 而且我從來沒有打過電話,因爲我只是進入函數而輸入斷點。 – fernandojsg 2010-10-25 17:48:19

回答

6

我不確定你爲什麼沒有工作,但你可以嘗試添加一個監聽器到你的menuItem:setOnMenuItemClickListener。至少這會告訴你,你的上下文菜單項正在被選中。

+0

它使用該偵聽器,即使我也看到有點混淆爲什麼代碼不工作,我會採取你建議的方式,直到我將調查更多一點爲其他解決方案。 謝謝你 – fernandojsg 2010-10-25 18:11:01

+0

非常感謝謝麗爾西蒙! – 2015-03-22 15:07:25

0

這一行後:

registerForContextMenu(listViewSongs); 

類型的:

listViewSongs.setOnCreateContextMenuListener(this); 

而不是onContextItemSelected(菜單項項)功能使用此:

@Override 
public boolean onMenuItemSelected(int featureId, MenuItem menuItem) { 
+0

這在DialogFragment中不起作用 - 使用佈局充氣器從XMl創建菜單。必須做Mayra的回答並單獨創建項目並在每個項目上設置菜單項目Clicklistener – 2013-03-06 11:07:58

0

你必須把你的代碼之前調用基本方法(即super())