我正在创建一个小应用程序,并试图在actionbar上提供一个share按钮。相关代码如下:
显示
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="18" />
菜单项
<item android:id="@+id/shareMenuItem" android:showAsAction="never" android:title="@string/shareAction" android:orderInCategory="100" android:actionProviderClass="android.widget.ShareActionProvider"></item>
活动
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
MenuItem shareItem = menu.findItem(R.id.shareMenuItem);
mShareActionProvider = (ShareActionProvider) shareItem.getActionProvider();
return super.onCreateOptionsMenu(menu);
}
在这种情况下,一切正常。我想在actionbar上显示share按钮,并更改了showasaction=“ifroom”。share按钮现在显示在actionbar中,但不可单击。
我试着把其他菜单项改成ifroom,它们运行良好。不明白为什么share按钮不能正常工作。如有任何帮助/建议,我们将不胜感激!
最佳答案
“不可点击”shareaction按钮的原因是您的actionProvider
缺少意图(这是android可以找到匹配的意图)。
试着通过
mShareActionProvider.setShareIntent(youIntentWithAction);
在您从
onCreateOptionsMenu
返回之前更新
我相信它对showasaction=“never”的情况是正确的,只是因为当您打开溢出选项(那些标记为“never”)并单击您
shareItem
时,意图被正确设置,而当您在操作栏中拥有它时,不会发生这种情况。有一种猜测是,您在实现
onPrepareOptionsMenu
时设置了操作意图(如果有),只有在打开overflow
项时才会调用该操作(启动期间打开一次),而不会调用actionbar项。一件重要的事情是:
如果ActionProvider显示在操作栏中,则不会为带有ActionProvider的Menuitem触发
onOptionsItemSelected
(即,如果此ActionProvider位于溢出菜单中,则ActionProvider仍将在用户操作时触发onOptionsItemSelected
)。这可能解释了为什么在
setShareIntent
时没有机会为actionprovider动态showAsAction="ifRoom"
。如果仍希望
setShareIntent
进入onOptionsItemSelected
,则在处理另一个(非actionprovider)项的选择时可能需要这样做。如果有帮助,请告诉我。