Android 之 Context Menu 上下文菜单

阅读更多
/*  上下文菜单测试

概念介绍:
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 list = new ArrayList();
	
	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 adapter = new ArrayAdapter(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;
	}

}

  • Android 之 Context Menu 上下文菜单_第1张图片
  • 大小: 56.3 KB
  • Android 之 Context Menu 上下文菜单_第2张图片
  • 大小: 109.4 KB
  • Android 之 Context Menu 上下文菜单_第3张图片
  • 大小: 111.6 KB
  • Android 之 Context Menu 上下文菜单_第4张图片
  • 大小: 78.2 KB
  • 查看图片附件

你可能感兴趣的:(android,Context,Menu)