Android:上下文菜单的使用
一、下文菜单简介
通常上下文菜单是以浮动菜单的形式呈现的,用户长按(按住)一个支持上下文菜单的View时,菜单将以浮动列表的形式出现(类似于对话框)。 通常用户一次可对一个项目执行上下文操作(比如一个单独的控件或列表中的一项)。
Android 用 ContextMenu 来代替上下文菜单,与开发选项菜单方法十分类似,因为 ContextMenu 继承了 Menu 。
要提供浮动上下文菜单,可以参照以下步骤:
1.在Activity或Fragment中重写 onCreateContextMenu() 方法,加载 XML 类型的 Menu 资源或者使用代码动态生成 Menu 。
2.在Activity或Fragment中调用registerForContextMenu(View view)方法,来注册需要和上下文菜单关联的View。如果将ListView或GridView作为参数传入,那么每个列表项将会有相同的浮动上下文菜单。
3.在Activity或Fragment中重写 onContextItemSelected() 方法,实现菜单项的点击逻辑。
二、实例
XML代码:
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/context_option_add"
android:title="添加"/>
<item android:id="@+id/context_option_delete"
android:title="删除"/>
<item android:id="@+id/context_option_save"
android:title="保存"/>
</menu>
Java代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_context_menu);
//初始化ListView
ListView listView= (ListView) findViewById(R.id.list_context_menu);
ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1,createDataList());
listView.setAdapter(adapter);
//为ListView注册上下文浮动菜单
registerForContextMenu(listView);
}
//生成测试数据List
private List<String> createDataList(){
List<String> list=new ArrayList<>();
for(int i=0;i<10;i++){
list.add("测试条目"+i);
}
return list;
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater inflater=getMenuInflater();
inflater.inflate(R.menu.context_menu,menu);
}
@Override
public boolean onContextItemSelected(MenuItem item) {
switch (item.getItemId()){
case R.id.context_option_add:
Toast.makeText(this,"添加",Toast.LENGTH_SHORT).show();
return true;
case R.id.context_option_save:
Toast.makeText(this,"保存",Toast.LENGTH_SHORT).show();
return true;
case R.id.context_option_delete:
Toast.makeText(this,"删除",Toast.LENGTH_SHORT).show();
return true;
default:
return super.onContextItemSelected(item);
}
}
在 onCreateContextMenu() 方法中,方法参数包括用户所选的View,以及一个提供有关所选项目的附加信息的 ContextMenu.ContextMenuInfo 对象。如果需要为多个View设置不同的上下文菜单,则可使用这些参数确定要加载的上下文菜单资源。
在 onContextItemSelected() 方法中,成功处理菜单项的监听事件后,系统将返回 true。需要注意在default分支中,应该调用 super.onContextItemSelected(item)。如果 Activity包括 Fragment,则系统将依次为 Activity 和每个 Fragment(按照每个Fragment的添加顺序)调用 onContextItemSelected() 方法,直到有一个返回结果为 true 或所有 Fragment 都调用完毕为止。