java - 调用 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 方法。
解决方案
因此,在 sasikumar 的评论的帮助下,我设法找到了问题并解决了它:
所以我不得不使用:
MenuItemCompat.getActionProvider(menuItem)
但是,我不得不将我的 ActionProvider 的类型更改为:
android.support.v7.widget.ShareActionProvider
现在,我可以安全地从 getActionProvider 转换结果,并使用以下方法保持设置共享意图的能力:
_shareActionProvider.setShareIntent(intent)
除此之外,我还必须更改 ShareActionProvider 的命名空间
从:
android.widget.ShareActionProvider
至:
android.support.v7.widget.ShareActionProvider
推荐阅读
- python-3.x - 使用 apache beam 中的 beam.io.gcp.bigquery.WriteToBigQuery 模块写入日期分区的 Bigquery 表
- django - 如何在一个字段中添加多个电子邮件
- c# - 如何将Unicode字符插入csv文件?
- python - 如何在带有 JSONfield 的 django_filters 中使用 ModelMultipleChoiceFilter
- excel - 运行宏后如何在excel中保存轴边界?
- python-3.x - asyncio 似乎在 HTTP 请求完成之前完成
- python - 无法从网页中抓取格式混乱的某些字段
- python - NumPy 2D 矩阵:在列为真时返回真行索引
- postgresql - 有没有办法在 postgres 中为一组单词(不是所有单词)创建索引?
- c# - Unity:如何在 ScriptableObjects 中使用泛型?