我正在创建一个小应用程序,并试图在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)项的选择时可能需要这样做。
如果有帮助,请告诉我。

07-28 12:36