上下文操作栏不跟操作栏关联,它们独立地操作,上下文操作栏甚至可以显示在操作栏位置之上。
对于那些提供上下文操作的View对象,你通常应该在以下两种事件之上调用上下文操作模式:
1. 用户在View对象上执行一个长按(long-click)操作。
2. 用户选择了一个复选框或View对象中类似复选框的UI组件。
应用程序如何调用上下文操作模式,并给每个操作定义行为,依赖于你的设计。有以下两种基本的设计:
1. 针对个别的、任意的View对象的上下文操作:
i. 实现ActionMode.Callback接口。在它的回调方法中,你能够针对上下文操作栏指定动作,在操作项目上响应点击事件和处理针对这个操作模式的其他生命周期事件。
ii. 在显示这个操作栏时,调用startActionMode()方法,参数为实现ActionMode.Callback接口类的对象(如用户长按(long-click)对应的view对象时,调用该方法显示上下文操作栏)。
如:
a) 实现ActionMode.Callback接口:
b) 在适当的时机调用startActionMode()方法启用上下文操作模式,如在响应一个View对象(如Button)的长按事件时:
当调用startActionMode()方法时,系统返回被创建的ActionMode对象。通过把这个对象保存在一个成员变量中,能够在对其他事件的响应中对上下文菜单进行改变。
效果图如下:
2. 针对ListView或GridView对象中项目组的批处理上下文操作(允许用户选择多个项目,并这些选择的项目上执行一个操作):
如果在ListView或GridView对象(或是另外的AbsListView类的扩展)中有一个项目的集合,并且想要允许用户对其执行批处理操作,那么应该按如下的方法:
i. 实现AbsListView.MultiChoiceModeListener接口,并且要用setMultiChoiceModeListener()方法把它设置给ViewGroup对象。在这个监听器的回调方法中,你能够给这个上下文操作栏指定动作,响应在操作项目上的点击事件,并且处理从ActionMode.Callback接口中继承来的其他回调方法。
ii. ViewGroup对象调用带有CHOICE_MODE_MULTIPLE_MODAL参数的setChoiceMode()方法。
当用户用长按事件选择一个项目时,系统会调用onCreateActionMode()方法,并显示带有特定操作的上下文操作栏。同时在上下文操作栏显示时,用户还能继续选择其他的项目。
效果图如下:
接口回调方法讲解:
onItemCheckedStateChanged :处于选择模式,一个选项被选择或取消选择时此方法被调用。
onActionItemClicked:用户点击一个动作按钮时调用
onCreateActionMode:上下文操作模式第一次被创建时调用
onDestroyActionMode:当一个上下文操作模式被退出或销毁时调用
onPrepareActionMode:当一个上下文操作模式的动作菜单无效时,将其重新刷新时调用