转载:http://houwanji.blog.163.com/blog/static/1622762200972644732128/ 首先在onCreate函数中的末尾, 添加registerForContextMenu(getListView());语句, 意思是将屏幕中listView的每一项,都看做是菜单 项,进行注册, 然后在继承onCreateContextMenu()方法.如下: @Override //创建 长按弹出式 菜单 ,这是一个回调函数 public void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); menu.add(0, DELETE_ID, 0, R.string.menu_delete); //添加两个菜单 项 menu.add(0, INSERT_ID, 0, R.string.menu_insert); } 最后再设置菜单 项被选中后的动作 @Override public boolean onContextItemSelected(MenuItem item) { switch(item.getItemId()){ case DELETE_ID: AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); //获取菜单 信息 mDbHelper.deleteNote(info.id); //删除被选中的记事 fillData(); return true; } return super.onContextItemSelected(item); } 长按事件可以使用ListView的setOnItemLongClick函数进行关联,但是在响应的onItemLongClick函数里面没办法调用ListView显示菜单 。 在Android 的菜单 分两种:options menu 、context menu 。(也有分三种的:options menu 、context menu、sub menu)其中options menu是和Activity相关联的,context menu 是和View关联。我们需要点击控件出现的菜单 属于context menu ;但是context menu 只能通过setOnCreateContextMenuListener来进行关联。 实现这个效果需要理解对ListView的item长按之后发生的事情: 首先触发的是onItemLongClick函数,执行onItemLongClick操作,然后根据onItemLongClick的返回值判 断是不是执行OnCreateContextMenuListener函数;如果onItemLongClick返回false,则会继续执行 OnCreateContextMenuListener函数,否则返回true,忽略OnCreateContextMenuListener函数。 因此我们可以在onItemLongClick的时候进行判断并且准备好OnCreateContextMenuListener中需要用到的数据,然后在OnCreateContextMenuListener中调用这些数据显示即可。
