【问题标题】:ShareActionProvider does not work when showAsAction=ifRoom当 showAsAction=ifRoom 时 ShareActionProvider 不起作用
【发布时间】:2013-11-29 14:56:26
【问题描述】:

我正在创建一个小型应用程序并尝试在 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,它们工作正常。不太明白为什么单独的“共享”按钮无法正常工作。感谢任何帮助/建议!

【问题讨论】:

    标签: android shareactionprovider


    【解决方案1】:

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

    进行设置
    mShareActionProvider.setShareIntent(youIntentWithAction);
    

    在您从onCreateOptionsMenu返回之前

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

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

    这也许可以解释为什么当showAsAction="ifRoom" 时您没有机会为您的actionProvider 动态地setShareIntent

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

    如果有帮助,请告诉我。

    【讨论】:

    • 我的意图取决于用户操作。所以我不能在onCreateOptionsMenu中设置它。如果我设置了一些静态值,共享按钮就会启用。但是如果不做这一切,当 showAsAction="never" 时它可以正常工作。它仅在 showAsAction="ifRoom" 时禁用,这对我来说看起来很奇怪。
    • 目前,我在 onOptionsItemSelected 方法中调用 setShareIntent。我分享的内容是动态的。如果我将其更改为 ifRoom,共享按钮将被禁用。当我按照您的建议在 onCreateOptionsMenu 中 setShareIntent 时,它可以工作。我尝试使用 String 成员变量进行设置,并尝试根据内容更新变量。它只采用我设置 Intent 的第一个值。
    • 我在回答您的最后一条评论时附加了答案。请检查一下
    • 酷...现在说得通了。我将 setShareIntent 移至另一个方法,它现在按预期工作。谢谢!
    • 嘿@jobinbasani,你能解释一下你是怎么做到的吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-01
    • 2014-04-30
    • 2014-03-19
    • 1970-01-01
    • 2011-05-05
    相关资源
    最近更新 更多