2010-05-18 74 views
5

在列表視圖中的列表項上長按一下上下文菜單不會彈出。我擴展了基本適配器,並使用視圖持有者來實現帶有textviews和imagebutton的自定義列表。 onCreateContextMenuContextMenu不會彈出長按

@Override 
public void onCreateContextMenu(ContextMenu menu, View v, 
    ContextMenuInfo menuInfo) { 
    // TODO Auto-generated method stub 
    super.onCreateContextMenu(menu, v, menuInfo); 

    Log.d(TAG, "Entering Context Menu"); 

    menu.setHeaderTitle("Context Menu"); 

    menu.add(Menu.NONE, DELETE_ID, Menu.NONE, "Delete") 
    .setIcon(R.drawable.icon); 
} 

adapter = new MyClickableListAdapter(this, R.layout.timeline, mObjectList); 
     list.setAdapter(adapter); 
     registerForContextMenu(list); 

實施中的XML爲列表視圖是這裏

<ListView 
    android:id="@+id/list" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    /> 

我一直想這多天。我認爲不可能像這樣爲自定義列表視圖註冊上下文菜單。糾正我,如果我錯了(可能與示例代碼)。

現在我正在考慮在列表項中添加一個按鈕,並在點擊它時顯示一個菜單。除了使用對話框以外,還有其他方法嗎?

任何幫助將不勝感激..

回答

5

爲什麼不使用ListActivity

在我ListActivity我:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    /* setContentView() and all stuff that happens in this method */ 
    registerForContextMenu(getListView()); 
} 

@Override 
public void onCreateContextMenu(ContextMenu menu, View v, 
     ContextMenuInfo menuInfo) { 
    super.onCreateContextMenu(menu, v, menuInfo); 
    AdapterView.AdapterContextMenuInfo info; 
    try { 
     info = (AdapterView.AdapterContextMenuInfo) menuInfo; 
    } catch (ClassCastException e) { 
     Log.e(TAG, "bad menuInfo", e); 
    return; 
    } 

    Something something = (Subway) getListAdapter().getItem(info.position); 
    menu.setHeaderTitle(something.getName()); 
    menu.setHeaderIcon(something.getIcon()); 
    menu.add(0, CONTEXT_MENU_SHARE, 0, "Do something!"); 
} 

@Override 
public boolean onMenuItemSelected(int featureId, MenuItem item) { 
    AdapterView.AdapterContextMenuInfo info; 
    try { 
     info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo(); 
    } catch (ClassCastException e) { 
     Log.e(TAG, "bad menuInfo", e); 
     return false; 
    } 

    switch (item.getItemId()) { 
     case DO_SOMETHING: 
      /* Do sothing with the id */ 
      Something something = getListAdapter().getItem(info.position); 
      return true; 
    } 
+0

謝謝。必須嘗試此代碼。 – primpap 2010-05-18 14:25:05

+0

@Macarse這是長按? – likejiujitsu 2014-03-12 23:35:55

2

使用OnItemLongClickListener(通過集〜)ListView控件的方法。

+0

我嘗試在列表視圖上使用OnItemLongClickListener。它墜毀。 – primpap 2010-05-18 08:26:18

+0

@primal:它用一個'StackOverflowException'碰撞了嗎? – Macarse 2010-05-18 11:19:10

+0

編號其他一些錯誤。我不記得知道。我用文本視圖長按一下就可以替換它,並顯示一個帶有按鈕的對話框。它達到了目的。 – primpap 2010-05-18 14:24:39

8

這樣的問題出現在列表視圖中時,它具有可聚焦的項目,如複選框,單選按鈕等。爲了解決這個問題,我在列表項的佈局中爲可聚焦的項目包括:

android:focusable="false";