1

当我通过 onListItemClick 函数调用新活动时,长按功能(onCreateContextMenu 函数)不起作用。如果我在 onListItemClick 函数中注释 try catch 代码片段中的代码,则 onCreateContextMenu 可以完美运行。但是我必须将这两个功能用于不同的目的。

    setListAdapter(new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1, listitems));

}

@Override
public void onListItemClick(ListView l, View v, int position, long id) {
    super.onListItemClick(l, v, position, id);

    registerForContextMenu(v);
    try{
        Intent intent = new Intent(MainActivity.this, Contacts_list.class);
        intent.putExtra("GroupName", listitems[position]);
        startActivity(intent);
    }
    catch (Exception e) {
        e.printStackTrace();
    }
}

@Override
public void onCreateContextMenu(ContextMenu menu, View view,
        ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, view, menuInfo);

    menu.add(1, 1, 1, "Details");
    menu.add(1, 2, 2, "Delete");

}
4

1 回答 1

0

首先,上下文菜单并不是特别流行——它是一种旧的 UI 样式。

话虽如此,使用带有 a 的上下文菜单的正确方法ListView是:

  1. 调用registerForContextMenu(),传入你的活动(或你的片段)ListView,从(副作用:摆脱你的调用)onCreate()onCreateView()registerForContextMenu()onListItemClick()

  2. onContextItemSelected()中,根据选择的上下文菜单做任何你想做的事情

要找出onContextItemSelected()用户在哪一行长按以调出菜单,请调用传入getMenuInfo()的in ,将该对象转换为,然后查看数据成员:MenuItemonContextItemSelected()AdapterView.AdapterContextMenuInfoposition

AdapterView.AdapterContextMenuInfo info=
          (AdapterView.AdapterContextMenuInfo)item.getMenuInfo();

// then do something with info.position
于 2013-07-18T19:03:58.097 回答