Android支持库v7,无法获取ActionProvider

时间:2014-01-12 04:15:04

标签: android android-actionbar android-support-library android-actionbar-compat oncreateoptionsmenu

我有这样的自定义ActionProvider。

....
import android.support.v4.view.ActionProvider;

public class MyActionProvider extends ActionProvider {
    ....
}

在menu.xml中

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:yourapp="http://schemas.android.com/apk/res-auto" >
    <item android:id="@+id/example_action_provider"
    yourapp:showAsAction="ifRoom"
    android:title="More"
    android:icon="@drawable/abc_ic_menu_moreoverflow_normal_holo_light"
    yourapp:actionProviderClass="com.example.MyActionProvider" />
</menu>

我正在尝试使用此代码获取ActionProvider:

import android.support.v4.view.ActionProvider;

public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.menu, menu);
    MenuItem menuItem = menu.findItem(R.id.example_action_provider);
    Object hack = menuItem.getActionProvider();
    ActionProvider actionProvider = (ActionProvider)hack;
    super.onCreateOptionsMenu(menu, inflater);
}

menuItem.getActionProvider返回android.support.v7.internal.view.menu.MenuItemWrapperJB $ ActionProviderWrapperJB类型的对象。并且它无法转换为android.support.v4.view.ActionProvider。由于MyActionProvider获取了一些点击事件,因此需要告知片段或活动。如何处理这种情况?

1 个答案:

答案 0 :(得分:3)

您必须使用MenuItemCompat.getActionProvider(MenuItem)来检索ActionProvider,如Adding an Action Provider guide上的示例所示。