2011-08-27 83 views
0

在我的應用程序中,我的主佈局中有一個ListView。在相應的活動,我在我的onCreate如下:Android:ContextMenu不會顯示

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    app = (MyTallyKeeperApplication) getApplication(); 
    adapter = new TallyItemListAdapter(this, app.getTallyItems()); 
    setListAdapter(adapter); 
    registerForContextMenu(getListView()); 
} 

在ListView每個產品類型TallyItemView的,從繼承的LinearLayout。我用膨脹上下文菜單的代碼是:

@Override 
public void onCreateContextMenu(ContextMenu menu, View v, 
     ContextMenuInfo menuInfo) { 
    super.onCreateContextMenu(menu, v, menuInfo); 
    Log.i(MyTallyKeeperMain.class.getSimpleName(), "onCreateContextMenu"); 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.item_menu, menu); 
} 

從理論上講,當你長按某個項目,會出現一個上下文菜單,讓你選擇要編輯的項目或刪除它。但是當我長時間按一件物品時,什麼都沒有顯示出來。 有關我如何解決此問題的任何想法?

回答

8

如果列表中有可聚焦項目(複選框等),則會發生這種情況在列表行的佈局中,爲可聚焦組件包含此項。

android:focusable="false" 
+0

如果我們需要他們可以關注,該怎麼辦? – tasomaniac

0

試着做你的super.onCreateContextMenu(menu, v, menuInfo);最後而不是第一。 Here is a sample project顯示使用ListView的上下文菜單。

+0

我試着移動它,但沒有運氣。使用複合控件與此有什麼關係? – MissPiplup

+0

由於某種原因onCreateContextMenu似乎沒有被調用。我確信這是因爲我放在那裏的日誌聲明沒有顯示在LogCat中。 – MissPiplup

+0

我對代碼進行了更多的挖掘,發現上下文菜單沒有正確註冊爲listview。我放在main.xml中的ListView的ID爲@android:id/list。使用registerForContextMenu(getListView())應該已經工作。我不明白。 – MissPiplup