Android 之 Context Menu 上下文菜单

[size=small][color=olive][b]/* 上下文菜单测试

概念介绍:
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()方法,为视图注册上下文菜单;
[/b][/color][/size]



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;
}

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值