ContextMenu是android的context menu上下文菜单,选择某项VIEW后长按menu键,就会显示出来。实现ContextMenu,一般要用到以下三个方法:
(1)registerForContextMenu(getExpandableListView());
(2)onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo);
(3)onContextItemSelected(MenuItem item);
一般分为三个步骤:
1.在activity的onCreate(...)方法中为一个view注册上下文菜单
2.在onCreateContextMenuInfo(...)中生成上下文菜单。
3.在onContextItemSelected(...)中响应上下文菜单项。
布局文件:layout_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<ListView
android:id="@+id/listview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</RelativeLayout>
item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
MainActivity.java
public class MainActivity extends Activity {
private ListView listView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
showListView(); //显示列表
registerForContextMenu(listView); //为多有列表注册上下文菜单
}
/*
* 显示列表
*/
public void showListView(){
listView = (ListView) this.findViewById(R.id.listview);
String [] files=new String []{"文件1","文件2","文件3"};
List<Map<String, ?>> list = new ArrayList<Map<String,?>>();
for(String str:files){
Map<String, Object> map = new HashMap<String, Object>();
map.put("name", str);
list.add(map);
}
SimpleAdapter adapter = new SimpleAdapter(MainActivity.this, list, R.layout.item, new String[]{"name"}, new int[]{R.id.text});
listView.setAdapter(adapter);
}
/*
* 生成上下文菜单
*/
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
menu.setHeaderTitle("提示操作"); //设置操作名字
//添加 menu item
menu.add(0,1,Menu.NONE,"编辑");
menu.add(0,2, Menu.NONE, "删除");
}
/*
* 响应上下文菜单项
*/
@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterContextMenuInfo menuInfo = (AdapterContextMenuInfo) item.getMenuInfo(); //得到当前被选中的item的信息
Log.v("MainActivity", "取当前选中item的id:"+menuInfo.id); //获取当前选中item的id
//进行操作
switch (item.getItemId()) {
case 1:
Toast.makeText(MainActivity.this, "您选中的是编辑操作", Toast.LENGTH_LONG).show();
break;
case 2:
Toast.makeText(MainActivity.this, "您选中的是删除操作", Toast.LENGTH_LONG).show();
break;
default:
return super.onContextItemSelected(item);
}
return true;
}
}
需要注意的是:在oncreat()中registerForContextMenu(listView); //为多有列表注册上下文菜单,不要忘记写!!
下面是效果图: