Android开发时,最常用的控件之一就是ListView了,而使用ListView的同时,必然需要对它设置监听器,常用的监听器有这么几个
1.OnItemClickListener 监听器在点击该项目的子项时触发2.OnTouchListener 监听器在触碰到ListView时触发
3.OnScrollListener 监听器在ListView滚动时触发
4.OnItemLongClickListener 监听器在长按该项目的子项时触发
长按事件可以使用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中调用这些数据显示即可。
下面上代码
MainActivity.java
package com.FiveLiu.listview;
import java.util.ArrayList;
import java.util.HashMap;
import android.net.Uri;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.ContextMenu;
import android.view.MenuItem;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.View.OnCreateContextMenuListener;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemLongClickListener;
public class MainActivity extends Activity
{