概念介绍:
Android中的上下文菜单就是Context Menu ,效果就向PC机上鼠标右键,当为一个
视图注册了上下文菜单之后,长按这个视图对象就会弹出一个浮动菜单,就是上下文
菜单,任何视图都可以注册上下文菜单,可以最常见的还是用于列表ListView 的item项
实现过程:
* 知识点:创建上下文菜单(Context Menu) 需要实现两个方法:
* 1、覆写Activity的onContextItemSelected(MenuItem item),调用Menu的add方法添加菜单项;
* 2、覆写Activity的onCreateContextMenu(ContextMenu menu,View v,ContextMenuInfo menuinfo);
相应上下文菜单的单击事件;
3、调用registerForContextMenu()方法,为视图注册上下文菜单;
java实现代码:
package com.example.context_menu; import java.util.ArrayList; import android.app.Activity; import android.app.AlertDialog.Builder; import android.content.DialogInterface; import android.os.Bundle; import android.view.ContextMenu; import android.view.ContextMenu.ContextMenuInfo; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemLongClickListener; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.Toast; /* 盲点:@符号引用的是什么??? * */ public class MainActivity extends Activity { /* 变量保存上下文菜单项中的ID号 */ private final int item = Menu.FIRST; private final int item1 = item; private final int item2 = item+1; private final int item3 = item2+1; private final int item4 = item3+1; private int tempID = 0; //用于保存用户选择的人物ID号; private ListView listview ; /* ListView 里面的数据对象 */ private ArrayList<String> list = new ArrayList<String>(); protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); /* 获取ListView 的对象 */ listview = (ListView) findViewById(R.id.listview); /* M 获取数据 */ list.add("Monkey.D.Lully"); list.add("Roronoa Zoro"); list.add("Nami"); list.add("Usopp"); list.add("Sanji"); list.add("Tony Tony Chopper"); list.add("Nico Robin"); /* C 实现M与C 的关系 , 进行数据绑定 */ ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list); /* V 实现C与V 的纽带关系,进行数据显示 */ listview.setAdapter(adapter); /* 设置长按监听事件 */ listview.setOnItemLongClickListener(long_listener); } /* 编写:列表ListView的长按事件 */ OnItemLongClickListener long_listener = new OnItemLongClickListener() { public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int id, long positive) { /* 注册上下文菜单 *//* 为了保证长按事件和上下文菜单同时的实现,需将上下文注册写在长按事件中 */ registerForContextMenu(listview); tempID = id; // Toast.makeText(MainActivity.this, "当前选择的人物为:"+list.get(id), 3000).show(); return false; } }; /* 重写onCreateContextMenu方法 , 用于创建上下文菜单 */ public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { // TODO Auto-generated method stub /* 设置上下文菜单的标头 */ menu.setHeaderTitle(getResources().getString(R.string.context_menu_title)); menu.setHeaderIcon(R.drawable.ic_launcher); /* 添加上下文菜单项 */ menu.add(Menu.NONE, item1,0, getResources().getString(R.string.contenxt_menu_1)); menu.add(Menu.NONE, item2,0, getResources().getString(R.string.contenxt_menu_2)); menu.add(Menu.NONE, item3,0, getResources().getString(R.string.contenxt_menu_3)); menu.add(Menu.NONE, item4,0, getResources().getString(R.string.contenxt_menu_4)); super.onCreateContextMenu(menu, v, menuInfo); } /* 相应上下文菜单的点击事件 *//* 通过提示对话框来显示人物的相关信息 */ public boolean onContextItemSelected(MenuItem item) { /* 获取选项菜单总的数据信息 */ System.out.println("测试item的值:"+item); Builder builder = new Builder(this); String temp = ""; /* 通过不同的选项或得到了不同人物不同属性的值,保存在变量temp中 */ temp = this.getInfoForPerson(item.getItemId()); /* 创建对话框,用于显示用户得到的数据信息 */ builder.setTitle("人物:"+list.get(tempID)); builder.setMessage(item+"为:"+temp); /* 设置一个按钮 */ builder.setPositiveButton("Close", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub Toast.makeText(MainActivity.this, "欢迎下次再次查看", 1000).show(); } }); builder.create().show(); return super.onContextItemSelected(item); } /* 方法:获取当前选择的人物,并根据菜单选项的不同返回对应的信息; *//* 接收不同ID,返回不同人物的不同的属性 */ public String getInfoForPerson(int context_id){ String temp = ""; switch(tempID){ case 0: //Monkey.D.Lully temp = this.getAttributeFor0(context_id); break; case 1: //Roronoa Zoro temp =this.getAttributeFor1(context_id); break; case 2: //Nami temp =this.getAttributeFor2(context_id); break; case 3: //Usopp temp =this.getAttributeFor3(context_id); break; case 4: //Sanji temp =this.getAttributeFor4(context_id); break; case 5: //Tony Tony Chopper temp =this.getAttributeFor5(context_id); break; case 6: //Nico Robin temp =this.getAttributeFor6(context_id); break; } return temp; } /* 获取每个人物的属性,通过选项ID ,来判断用户需要获得哪种属性 */ //Monkey.D.Lully public String getAttributeFor0(int context_id){ String temp = ""; switch(context_id){ case item1: //技能 temp = "橡胶攻击绝杀"; break; case item2: //战斗力 temp = "无限"; break; case item3: //语录 temp = "海贼王我当定了"; break; case item4: //职位 temp = "草帽海贼团船长"; break; } return temp; } //Roronoa Zoro public String getAttributeFor1(int context_id){ String temp = ""; switch(context_id){ case item1: //技能 temp = "三刀流"; break; case item2: //战斗力 temp = "无限"; break; case item3: //语录 temp = "切,鬼斩"; break; case item4: //职位 temp = "剑士"; break; } return temp; } //Nami public String getAttributeFor2(int context_id){ String temp = ""; switch(context_id){ case item1: //技能 temp = "镭射枪"; break; case item2: //战斗力 temp = "有限"; break; case item3: //语录 temp = "冰果"; break; case item4: //职位 temp = "航海士"; break; } return temp; } //Usopp public String getAttributeFor3(int context_id){ String temp = ""; switch(context_id){ case item1: //技能 temp = "草之心"; break; case item2: //战斗力 temp = "遇强则强"; break; case item3: //语录 temp = "必杀"; break; case item4: //职位 temp = "炮手"; break; } return temp; } //Sanji public String getAttributeFor4(int context_id){ String temp = ""; switch(context_id){ case item1: //技能 temp = "月步"; break; case item2: //战斗力 temp = "牛逼"; break; case item3: //语录 temp = "臭剑士"; break; case item4: //职位 temp = "厨师"; break; } return temp; } //Tony Tony Chopper public String getAttributeFor5(int context_id){ String temp = ""; switch(context_id){ case item1: //技能 temp = "激光大炮"; break; case item2: //战斗力 temp = "无限"; break; case item3: //语录 temp = "super"; break; case item4: //职位 temp = "船工"; break; } return temp; } //Nico Robin public String getAttributeFor6(int context_id){ String temp = ""; switch(context_id){ case item1: //技能 temp = "万花手"; break; case item2: //战斗力 temp = "无限"; break; case item3: //语录 temp = "呵呵"; break; case item4: //职位 temp = "考古学家"; break; } return temp; } }