长按时上下文菜单未弹出

5
  • 在列表视图中长按列表项时,上下文菜单没有弹出。我已经扩展了基本适配器,并使用视图持有者实现了带有文本视图和图片按钮的自定义列表。
adapter = new MyClickableListAdapter(this, R.layout.timeline, mObjectList);
       list.setAdapter(adapter);
       registerForContextMenu(list);  

onCreateContextMenu的实现

  @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);
 }

这里是listview的XML

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

我已经尝试了很多天,我认为像这样的自定义列表视图注册上下文菜单是不可能的。如果我错了,请纠正我(最好附带示例代码)。

现在我考虑在列表项中添加一个按钮,并在单击它时显示菜单。有没有比使用对话框更好的方法?

非常感谢任何帮助。

3个回答

8
当列表视图具有可获得焦点的项目(如复选框、单选按钮等)时,会出现这样的问题。为了解决这个问题,在可获得焦点的项目的列表项布局中,请包含以下内容:
android:focusable="false";

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;
    }

@Macarse 这是用于长按吗? - likejudo

2
使用ListView的setOnItemLongClickListener方法(通过set~方法)。

我尝试在ListView上使用OnItemLongClickListener,但它崩溃了。 - Primal Pappachan
不,出现了其他错误。我不记得了。我用长按文本视图替换了它,并显示了一个带有按钮的对话框。这样做达到了目的。 - Primal Pappachan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接