Android攻城狮认识ContextMenu

什么是ContextMenu?
例如Windows系统的右键菜单,在Android中长按某个文件夹,会跳出菜单,这个菜单就是ContextMenu。
ContextMenu与OptionMenu的区别
1. OptionMenu对应的是activity,一个activity只能拥有一个选项菜单;
2. ContextMenu对应的是View,每一个View都可以设置上下文菜单;
3. 一般情况下ContextMenu常用于ListView或者GridView。

ContextMenu创建方法
首先给View 注册上下文菜单registerForContextMenu()
添加上下文菜单内容 onCreateContextMenu()
-- 可以通过代码动态添加;
-- 可以加载xml文件中的菜单项。
设置菜单点击后的响应事件 onContextItemSelected()。
 1 public class MainActivity extends ActionBarActivity {
 2 
 3     @Override
 4     protected void onCreate(Bundle savedInstanceState) {
 5         super.onCreate(savedInstanceState);
 6         setContentView(R.layout.fragment_main);
 7         showListView();
 8 
 9     }
10 
11     // 设置showListView显示内容
12     private void showListView() {
13         ListView listView = (ListView) findViewById(R.id.listView1);
14         ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
15                 android.R.layout.simple_list_item_1, getData());
16         listView.setAdapter(adapter);
17         this.registerForContextMenu(listView);
18 
19     }
20 
21     @Override
22     public void onCreateContextMenu(ContextMenu menu, View v,
23             ContextMenuInfo menuInfo) {
24         // TODO Auto-generated method stub
25         super.onCreateContextMenu(menu, v, menuInfo);
26         // 设置meun显示内容
27         menu.setHeaderTitle("文件操作");
28         menu.setHeaderIcon(R.drawable.ic_launcher);
29         // 方法一 代码加载
30         // menu.add(1, 1, 1, "复制");
31         // menu.add(1, 2, 1, "粘贴");
32         // menu.add(1, 3, 1, "剪切");
33         // menu.add(1, 4, 1, "重命名");
34         // 方法二, xml加载:
35         MenuInflater inflater = getMenuInflater();
36         inflater.inflate(R.menu.main, menu);
37 
38     }
39 
40     // 监听事件:
41     @Override
42     public boolean onContextItemSelected(MenuItem item) {
43         // TODO Auto-generated method stub
44 
45         switch (item.getItemId()) {
46         // 方法一 代码加载:
47         case 1:
48             Toast.makeText(MainActivity.this, "点击复制", 0).show();
49             break;
50 
51         case 2:
52             Toast.makeText(MainActivity.this, "点击粘贴", 0).show();
53             break;
54         case 3:
55             Toast.makeText(MainActivity.this, "点击剪切", 0).show();
56             break;
57 
58         case 4:
59             Toast.makeText(MainActivity.this, "点击重命名", 0).show();
60             break;
61         // 方法二,xml加载
62         case R.id.context_menu_item1:
63             Toast.makeText(MainActivity.this, "点击复制", 0).show();
64             break;
65         case R.id.context_menu_item2:
66             Toast.makeText(MainActivity.this, "点击粘贴", 0).show();
67             break;
68         case R.id.context_menu_item3:
69             Toast.makeText(MainActivity.this, "点击剪切", 0).show();
70             break;
71         case R.id.context_menu_item4:
72             Toast.makeText(MainActivity.this, "点击重命名", 0).show();
73             break;
74 
75         }
76         return super.onContextItemSelected(item);
77     }
78 
79     // 构造listview显示数据
80     private ArrayList<String> getData() {
81 
82         ArrayList<String> list = new ArrayList<String>();
83         for (int i = 1; i < 5; i++) {
84             list.add("文件" + i);
85         }
86         return list;
87     }
88 }

原文地址:https://www.cnblogs.com/my334420/p/6785787.html