Melug
Melug

Reputation: 1031

Android support library v7, can't get ActionProvider

I have custom ActionProvider like this.

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

public class MyActionProvider extends ActionProvider {
    ....
}

And in 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>

I'm trying to get ActionProvider with this code:

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 returns android.support.v7.internal.view.menu.MenuItemWrapperJB$ActionProviderWrapperJB type of object. And it cannot be cast to android.support.v4.view.ActionProvider. Since MyActionProvider gets some clicked events, it needs to tell back to the fragment or activity. How to handle this situation?

Upvotes: 2

Views: 1743

Answers (1)

ianhanniballake
ianhanniballake

Reputation: 199825

You have to use MenuItemCompat.getActionProvider(MenuItem) to retrieve the ActionProvider as seen in the examples on the Adding an Action Provider guide.

Upvotes: 3

Related Questions