Java 调用MenuItem.getActionProvider()时发生异常

Java 调用MenuItem.getActionProvider()时发生异常,java,android,android-actionbar,Java,Android,Android Actionbar,因此,我在我的一个活动(AppCompatActivity)上使用了这个覆盖方法,它来自我在EclipseLuna上开发的一个旧项目 我每次打电话都会遇到异常情况: _shareActionProvider = (ShareActionProvider) item.getActionProvider(); 异常信息: 2018-10-25 15:39:22.332 20677-20677/com.eibimalul.smartgallery E/AndroidRuntime: FATAL EX

因此,我在我的一个活动(AppCompatActivity)上使用了这个覆盖方法,它来自我在EclipseLuna上开发的一个旧项目

我每次打电话都会遇到异常情况:

_shareActionProvider = (ShareActionProvider) item.getActionProvider();
异常信息:

2018-10-25 15:39:22.332 20677-20677/com.eibimalul.smartgallery E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.eibimalul.smartgallery, PID: 20677
    java.lang.UnsupportedOperationException: This is not supported, use MenuItemCompat.getActionProvider()
        at android.support.v7.view.menu.MenuItemImpl.getActionProvider(MenuItemImpl.java:782)
        at com.eibimalul.smartgallery.SingleImageDisplayActivity.onCreateOptionsMenu(SingleImageDisplayActivity.java:309)
        at android.app.Activity.onCreatePanelMenu(Activity.java:3465)
以下是我的方法:

@Override
    public boolean onCreateOptionsMenu(Menu menu) {

        getMenuInflater().inflate(R.menu.options_menu, menu);
        MenuItem item = menu.findItem(R.id.action_share);

        _shareActionProvider = (ShareActionProvider) item.getActionProvider();

        Intent shareIntent = createShareIntent();
        _shareActionProvider.setShareIntent(shareIntent);

        return true;
    }
编辑:

我想澄清一下:

我需要在代码的其他地方使用:

_sharedActionProvider.setShareIntent(intent);
因此,如果我想使用@sasikumar建议的方法,这意味着我需要更改提供程序类型,而新类型没有setShareIntent方法。

使用

MenuItemCompat.getActionProvider(menuItem)
而不是

item.getActionProvider();

因此,在sasikumar的评论的帮助下,我设法找到了问题并解决了它:

所以我不得不使用:

MenuItemCompat.getActionProvider(menuItem)
但是,我必须将ActionProvider的类型更改为:

android.support.v7.widget.ShareActionProvider
现在,我可以安全地从getActionProvider强制转换结果,并使用以下方法保持设置共享意图的能力:

_shareActionProvider.setShareIntent(intent)
除此之外,我还必须更改ShareActionProvider的名称空间

发件人:

致:


谢谢@sasikumar。但在我这样做之后,我得到了一个编译错误:“不兼容类型;无法将android.support.v4.view.ActionProvider转换为android.widget.ShareActionProvider”。当我将成员的类型更改为前者时,我就失去了该提供程序上其他地方调用setShareContent()的能力。
android.widget.ShareActionProvider
android.support.v7.widget.ShareActionProvider