5

我在我的项目中使用 ActionBarSherlock,并想设置一个分享按钮以在 FB 等上发布内容......我通过这种方式实现了这一点:将项目添加到操作栏(使用 ActionBarSherlock)

您可能知道,ShareActionProvider 添加了第二个图标,其中包含最常用的共享选项。这意味着另一个应用程序的图标出现在我的操作栏中,我想阻止这种行为......我已经看到了 2 种可能的解决方案,但不幸的是,两者都对我不起作用:/

第一次尝试是在我的目标类中实现 OnShareTargetSelectedListener 并覆盖 onShareTargetSelected 方法(如:ActionBarSherlock - 共享内容图标问题)。但是额外的图标仍然存在......这是我的代码:

@Override
public boolean onCreateOptionsMenu(Menu menu)
{
    getSupportMenuInflater().inflate(R.menu.share, menu);
    mShareActionProvider = (ShareActionProvider) menu.findItem(R.id.share).getActionProvider();
    Intent intent = getDefaultShareIntent();
    mShareActionProvider.setOnShareTargetSelectedListener(this);
    if(intent!=null)
        mShareActionProvider.setShareIntent(intent);
    return super.onCreateOptionsMenu(menu);
}

@Override
public boolean onShareTargetSelected(ShareActionProvider source,
                                     Intent intent) {
    this.startActivity(intent);
    // started activity ourself to prevent search history
    return true;
}

第二次尝试是从 ActionBarSherlock 重写一些类,以防止它显示额外的图标(如这里:如何在分享操作提供程序附近隐藏分享操作(使用最多)图标?)。但是我遇到了这个解决方案的问题,因为我无法从我的自定义类中导入 com.actionbarsherlock.widget.ActivityChooserModel (阻止到外部包)。即使将这个类复制到我的包中,它也没有用(应用程序崩溃)......

看起来禁用这个额外的图标是一件很平常的事情,但我不明白为什么上面的解决方案对我不起作用......

提前感谢您的任何想法和建议

4

2 回答 2

3

我不知道你是否解决了你的问题,但我有同样的问题要删除ShareActionProvider. 我尝试了所有方法,发现的答案与您相同(如何隐藏共享操作图标?)。
经过一番研究,我在第二条评论中发现了这个技巧:
Action Bar Sherlock has depreciated methods

  1. 将3 个类ShareActionProvider和)从 ABS复制/粘贴ActivityChooserView到您的包中。ActivityChooverModel
  2. 用您自己的包替换您的导入。
  3. 在新if (activityCount > 0 && historySize > 0)的. (您将收到错误消息:“setActived”不适用于您当前的版本)if (false)ActivityChooserView
  4. 保存并关闭课程。
  5. 将 menu.xml 中的类替换为您的项目android:actionProviderClass="com.myapp.ShareActionProvider"
  6. 在您的Manifest中,使minSdkVersion等于 11。保存您的项目。打扫。
  7. 回到你的,用你用过的旧的Manifest替换你的。minSdkVersion保存并清洁。

它完美地工作。让我知道此提示是否解决了您的问题。

于 2013-12-12T17:46:05.277 回答
0

1) FLLO 的上述解决方案对我完全有效,而且 2) 你可以只导入 ActionbarSherlock 库并使用它,这样就不需要像上面提到的那样编辑代码。但我的观点最好使用解决方案 1).... 因为在最新版本中他们使用了 ActionBarCompat

于 2014-06-06T08:31:53.460 回答