onCreateContextMenu函数不起作用

时间:2013-07-18 18:34:07

标签: android android-intent android-listview android-activity contextmenu

当我通过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");

}

1 个答案:

答案 0 :(得分:0)

首先,上下文菜单并不是特别受欢迎 - 它是一种旧的UI风格。

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

  1. 致电registerForContextMenu(),从您活动的ListView(或片段的onCreate())传入 onCreateView() (副作用:摆脱registerForContextMenu()}

  2. 中的onListItemClick()来电
  3. onContextItemSelected()中,根据所选的上下文菜单执行任何操作

  4. 要在onContextItemSelected()中找到用户长按该行的菜单,请在传递给getMenuInfo()的{​​{1}}上调用MenuItem,投放该对象成为onContextItemSelected(),并查看AdapterView.AdapterContextMenuInfo数据成员:

    position