2010-05-18 69 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";