Библиотека поддержки Android v7, не удается получить ActionProvider
У меня есть пользовательский 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 ответ
Решение
Вы должны использовать MenuItemCompat.getActionProvider(MenuItem), чтобы получить ActionProvider
как видно из примеров в руководстве " Добавление поставщика действий".