首页 > 解决方案 > 调用 MenuItem.getActionProvider() 时出现异常

问题描述

所以我在我的一个活动(AppCompatActivity)上有这个覆盖方法,它来自我在 Eclipse Luna 上开发的一个旧项目。

每当我打电话时,我都会收到异常:

_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 方法。

标签: javaandroidandroid-actionbar

解决方案


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

所以我不得不使用:

MenuItemCompat.getActionProvider(menuItem)

但是,我不得不将我的 ActionProvider 的类型更改为:

android.support.v7.widget.ShareActionProvider

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

_shareActionProvider.setShareIntent(intent)

除此之外,我还必须更改 ShareActionProvider 的命名空间

从:

android.widget.ShareActionProvider

至:

android.support.v7.widget.ShareActionProvider

推荐阅读