因此,我在自己的一项活动(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方法。
答案 0 :(得分:1)
使用
MenuItemCompat.getActionProvider(menuItem)
代替
item.getActionProvider();
答案 1 :(得分:1)
因此,在sasikumar的评论的帮助下,我设法找到了问题并加以解决:
所以我必须使用:
MenuItemCompat.getActionProvider(menuItem)
但是,我不得不将ActionProvider的类型更改为:
android.support.v7.widget.ShareActionProvider
现在,我可以安全地从getActionProvider强制转换结果,并保持使用以下命令设置共享意图的能力:
_shareActionProvider.setShareIntent(intent)
除此之外,我还必须更改ShareActionProvider的命名空间
来自:
android.widget.ShareActionProvider
收件人:
android.support.v7.widget.ShareActionProvider