public abstract class ActionProvider
extends Object
java.lang.Object | |
↳ | android.support.v4.view.ActionProvider |
Known Direct Subclasses |
这个类是完成给定任务的中介,例如共享文件。 它负责创建执行完成任务的操作的视图。 该类还实现了其他功能,例如执行默认操作。
注意:该类包含在support library中,以兼容API级别4和更高级别。 如果您开发的API级别14的应用程序和更高版本 ,您应该使用框架ActionProvider
类。
可以为MenuItem
指定一个MenuItem
,在这种情况下,它将负责创建在ActionBar
中出现的操作视图,作为操作项目显示该项目时菜单项的替代。 如果选择放置在ActionBar的溢出菜单上的菜单项并且没有任何菜单项回调处理选择,则提供者负责执行默认操作。 对于这种情况,提供者还可以选择提供用于完成手头任务的子菜单。
使用动作提供者来创建和处理动作视图有两种方式:
MenuItem
directly by calling setActionProvider(android.view.MenuItem, ActionProvider)
.
<item android:id="@+id/my_menu_item"
android:title="@string/my_menu_item_title"
android:icon="@drawable/my_menu_item_icon"
android:showAsAction="ifRoom"
android:actionProviderClass="foo.bar.SomeActionProvider" />
要创建自定义操作提供程序,请根据需要扩展ActionProvider并实现其回调方法。 特别是实施以下方法:
ActionProvider()
constructor
onCreateActionView(MenuItem)
LayoutInflater
and inflate your action provider's layout from an XML resource, then hook up event listeners for the view's components. For example:
public View onCreateActionView(MenuItem forItem) { // Inflate the action provider to be shown on the action bar. LayoutInflater layoutInflater = LayoutInflater.from(mContext); View providerView = layoutInflater.inflate(R.layout.my_action_provider, null); ImageButton button = (ImageButton) providerView.findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // Do something... } }); return providerView; }
onPerformDefaultAction()
当用户从动作溢出中选择一个菜单项时,系统调用此方法。 操作提供者应该为菜单项执行默认操作。 如果菜单项打开子菜单,系统不会调用此方法。
如果您的行动提供商通过onPrepareSubMenu()
回拨显示子菜单,即使行动提供商处于溢出菜单中,也会出现子菜单。 因此,如果有子菜单,系统不会调用onPerformDefaultAction()
。
注意:实现onOptionsItemSelected()
的活动或片段可以通过处理项目选定事件并返回true
来覆盖操作提供者的默认行为(除非它使用子菜单)。 在这种情况下,系统不会调用onPerformDefaultAction()
。
也可以看看:
Nested classes |
|
---|---|
interface |
ActionProvider.VisibilityListener 监听 |
Public constructors |
|
---|---|
ActionProvider(Context context) 创建一个新的实例。 |
Public methods |
|
---|---|
Context |
getContext() 获取与此操作提供者关联的上下文。 |
boolean |
hasSubMenu() 确定此ActionProvider是否具有与其关联的子菜单。 |
boolean |
isVisible() 如果 |
abstract View |
onCreateActionView() 用于创建新操作视图的工厂方法。 |
View |
onCreateActionView(MenuItem forItem) 由Android框架调用的工厂方法来创建新的操作视图。 |
boolean |
onPerformDefaultAction() 执行可选的默认操作。 |
void |
onPrepareSubMenu(SubMenu subMenu) 调用以为由此ActionProvider支持的菜单项准备相关的子菜单。 |
boolean |
overridesItemVisibility() 此方法的结果决定 |
void |
refreshVisibility() 如果此ActionProvider与菜单中的项目相关联,请根据 |
void |
setVisibilityListener(ActionProvider.VisibilityListener listener) 设置一个侦听器,当这个ActionProvider被覆盖的可见性发生变化时通知它。 |
Inherited methods |
|
---|---|
From class java.lang.Object
|
ActionProvider (Context context)
创建一个新的实例。
Parameters | |
---|---|
context |
Context : Context for accessing resources. |
boolean hasSubMenu ()
确定此ActionProvider是否具有与其关联的子菜单。
关联的子菜单将在操作视图不显示时显示。 在向onPrepareSubMenu(SubMenu)
的呼叫onPerformDefaultAction()
以及向用户显示子菜单之前,此提供程序实例将接到对onPrepareSubMenu(SubMenu)
的呼叫。
Returns | |
---|---|
boolean |
true if the item backed by this provider should have an associated submenu |
boolean isVisible ()
如果 overridesItemVisibility()
返回true,则此方法的返回值将有助于确定此ActionProvider绑定的 MenuItem
的可见性。
如果MenuItem的可见性被应用程序显式设置为false,则即使此方法返回true,MenuItem也不会显示。
Returns | |
---|---|
boolean |
true if the MenuItem this ActionProvider is bound to is visible, false if it is invisible. The default implementation returns true. |
View onCreateActionView (MenuItem forItem)
由Android框架调用的工厂方法来创建新的操作视图。 此方法为给定的MenuItem返回一个新的操作视图。
如果您的ActionProvider实现覆盖已弃用的无参数过载onCreateActionView()
,建议您为运行API 16或更高版本的设备重写此方法,但可选。 默认实现调用onCreateActionView()
以与为旧版平台版本编写的应用程序兼容。
Parameters | |
---|---|
forItem |
MenuItem : MenuItem to create the action view for |
Returns | |
---|---|
View |
the new action view |
boolean onPerformDefaultAction ()
执行可选的默认操作。
对于放置在未显示为菜单项的操作提供者的情况,如果先前用于处理菜单选择的回调处理了该事件,则调用此方法。
菜单项选择按以下顺序处理:
MenuItem.OnMenuItemClickListener.onMenuItemClick
.onOptionsItemSelected(android.view.MenuItem)
FragmentActivity.onOptionsItemSelected(MenuItem)} onOptionsItemSelected(android.view.MenuItem)
Fragment.onOptionsItemSelected(MenuItem)}Intent
set via MenuItem.setIntent(android.content.Intent)
默认实现不执行任何操作并返回false。
Returns | |
---|---|
boolean |
void onPrepareSubMenu (SubMenu subMenu)
调用以为由此ActionProvider支持的菜单项准备相关的子菜单。
如果hasSubMenu()
返回true,则在选择菜单项以准备用于呈现给用户的子菜单时将调用此方法。 应用程序可以使用它在显示之前创建或更改子菜单内容。
Parameters | |
---|---|
subMenu |
SubMenu : Submenu that will be displayed |
boolean overridesItemVisibility ()
此方法的结果决定 isVisible()
是否将由此ActionProvider绑定的 MenuItem
使用,以帮助确定其可见性。
Returns | |
---|---|
boolean |
true if this ActionProvider overrides the visibility of the MenuItem it is bound to, false otherwise. The default implementation returns false. |
也可以看看:
void refreshVisibility ()
如果此ActionProvider与菜单中的项目相关联,请根据overridesItemVisibility()
和isVisible()
刷新该项目的可见性。 如果overridesItemVisibility()
返回false,则此调用将不起作用。
void setVisibilityListener (ActionProvider.VisibilityListener listener)
设置一个侦听器,当这个ActionProvider被覆盖的可见性发生变化时通知它。 这应该只能由MenuItem实现使用。
Parameters | |
---|---|
listener |
ActionProvider.VisibilityListener : listener to set |