Most visited

Recently visited

ActionProvider

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的溢出菜单上的菜单项并且没有任何菜单项回调处理选择,则提供者负责执行默认操作。 对于这种情况,提供者还可以选择提供用于完成手头任务的子菜单。

使用动作提供者来创建和处理动作视图有两种方式:

Creating a custom action provider

要创建自定义操作提供程序,请根据需要扩展ActionProvider并实现其回调方法。 特别是实施以下方法:

ActionProvider() constructor
This constructor is passed the application context. You should save the context in a member field to use in the other callback methods.
onCreateActionView(MenuItem)
The system calls this method when the action provider is created. You define the action provider's layout through the implementation of this method. Use the context acquired from the constructor to instantiate a 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()

也可以看看:

Summary

Nested classes

interface ActionProvider.VisibilityListener

监听refreshVisibility()报告的可见性变化。

Public constructors

ActionProvider(Context context)

创建一个新的实例。

Public methods

Context getContext()

获取与此操作提供者关联的上下文。

boolean hasSubMenu()

确定此ActionProvider是否具有与其关联的子菜单。

boolean isVisible()

如果 overridesItemVisibility()返回true,则此方法的返回值将有助于确定此ActionProvider绑定到的 MenuItem的可见性。

abstract View onCreateActionView()

用于创建新操作视图的工厂方法。

View onCreateActionView(MenuItem forItem)

由Android框架调用的工厂方法来创建新的操作视图。

boolean onPerformDefaultAction()

执行可选的默认操作。

void onPrepareSubMenu(SubMenu subMenu)

调用以为由此ActionProvider支持的菜单项准备相关的子菜单。

boolean overridesItemVisibility()

此方法的结果决定 isVisible()是否将由此ActionProvider绑定的 MenuItem使用,以帮助确定其可见性。

void refreshVisibility()

如果此ActionProvider与菜单中的项目相关联,请根据 overridesItemVisibility()isVisible()刷新该项目的可见性。

void setVisibilityListener(ActionProvider.VisibilityListener listener)

设置一个侦听器,当这个ActionProvider被覆盖的可见性发生变化时通知它。

Inherited methods

From class java.lang.Object

Public constructors

ActionProvider

ActionProvider (Context context)

创建一个新的实例。

Parameters
context Context: Context for accessing resources.

Public methods

getContext

Context getContext ()

获取与此操作提供者关联的上下文。

Returns
Context

hasSubMenu

boolean hasSubMenu ()

确定此ActionProvider是否具有与其关联的子菜单。

关联的子菜单将在操作视图不显示时显示。 在向onPrepareSubMenu(SubMenu)的呼叫onPerformDefaultAction()以及向用户显示子菜单之前,此提供程序实例将接到对onPrepareSubMenu(SubMenu)的呼叫。

Returns
boolean true if the item backed by this provider should have an associated submenu

isVisible

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.

onCreateActionView

View onCreateActionView ()

用于创建新操作视图的工厂方法。

Returns
View A new action view.

onCreateActionView

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

onPerformDefaultAction

boolean onPerformDefaultAction ()

执行可选的默认操作。

对于放置在未显示为菜单项的操作提供者的情况,如果先前用于处理菜单选择的回调处理了该事件,则调用此方法。

菜单项选择按以下顺序处理:

默认实现不执行任何操作并返回false。

Returns
boolean

onPrepareSubMenu

void onPrepareSubMenu (SubMenu subMenu)

调用以为由此ActionProvider支持的菜单项准备相关的子菜单。

如果hasSubMenu()返回true,则在选择菜单项以准备用于呈现给用户的子菜单时将调用此方法。 应用程序可以使用它在显示之前创建或更改子菜单内容。

Parameters
subMenu SubMenu: Submenu that will be displayed

overridesItemVisibility

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.

也可以看看:

refreshVisibility

void refreshVisibility ()

如果此ActionProvider与菜单中的项目相关联,请根据overridesItemVisibility()isVisible()刷新该项目的可见性。 如果overridesItemVisibility()返回false,则此调用将不起作用。

setVisibilityListener

void setVisibilityListener (ActionProvider.VisibilityListener listener)

设置一个侦听器,当这个ActionProvider被覆盖的可见性发生变化时通知它。 这应该只能由MenuItem实现使用。

Parameters
listener ActionProvider.VisibilityListener: listener to set

Hooray!