当showAsAction = ifRoom时,ShareActionProvider不起作用

时间:2013-11-29 14:56:26

标签: android shareactionprovider

我正在创建一个小应用程序,并试图在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”。 “共享”按钮现在显示在ActionBar中,但不可点击。

我尝试将其他菜单项更改为ifRoom,它们工作正常。真的不明白为什么单独的Share按钮无法正常工作。任何帮助/建议表示赞赏!

1 个答案:

答案 0 :(得分:14)

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

进行设置
mShareActionProvider.setShareIntent(youIntentWithAction);

onCreateOptionsMenu

返回之前

<强>更新
我认为它只适用于showAsAction =“never”的情况,因为打开溢出选项(标有“never”的选项)并点击shareItem并正确设置意图当你在操作栏中有这个时,就不会发生这种情况 一个猜测是你在onPrepareOptionsMenu的实现中设置了你的动作意图(如果你有的话),只有当你打开overflow个项目(启动时+一次)而不是actionBar项目时才会调用它。

重要的一点是
对于带有 actionProvider 的menuItem,onOptionsItemSelected不会被触发,如果它显示在操作栏中(即 actionProvider 仍然会触发onOptionsItemSelected用户操作此 actionProvider 位于溢出菜单中。)

这可以解释为什么在setShareIntent时您无法动态showAsAction="ifRoom" actionProvider

如果您仍然需要setShareIntent中的onOptionsItemSelected,则可能需要在处理另一个(非 actionProvier )项目的选择时执行此操作。

如果有帮助,请告诉我。