8

我正在创建一个小型应用程序并尝试在 ActionBar 上提供一个共享按钮。相关代码如下:

显现

<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,它们工作正常。不太明白为什么单独的“共享”按钮无法正常工作。任何帮助/建议表示赞赏!

4

1 回答 1

14

“不可点击” shareAction 按钮的原因是缺少您actionProvider的意图(Android 可以找到匹配的意图)。
尝试通过设置它

mShareActionProvider.setShareIntent(youIntentWithAction);

在你回来之前onCreateOptionsMenu

更新
我相信它适用于 showAsAction="never" 的情况,只是因为在您打开溢出选项(标有“never”的选项)并单击您时正确设置了意图shareItem,当您在操作中使用它时不会发生这种情况酒吧。
一种猜测是您在实现中设置了您的操作意图onPrepareOptionsMenu(如果您有的话),它只会在您打开overflow项目时调用(在启动期间+一次)而不是 actionBar 项目。

一件重要的事情是:如果它显示在操作栏中,则不会为带有actionProvider
onOptionsItemSelected的 menuItem 触发(即,如果此actionProvider位于溢出菜单中,则actionProvider仍将触发用户操作)。onOptionsItemSelected

setShareIntent这或许可以解释为什么您没有机会showAsAction="ifRoom".

如果您仍然想要setShareIntentin onOptionsItemSelected,您可能需要在处理另一个(非actionProvier)项目的选择时这样做。

让我知道这是否有帮助。

于 2013-11-29T15:11:48.703 回答