删除操作栏上的额外图标(使用ShareActionProvider和ActionBarSherlock时)

时间:2013-09-26 20:18:22

标签: android android-actionbar actionbarsherlock

我在我的项目中使用ActionBarSherlock,并想设置一个分享按钮以在FB等处发布内容......我通过这种方式实现了:Adding items to action bar (using ActionBarSherlock)

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

在我的目标类中,首次尝试实现OnShareTargetSelectedListener并覆盖onShareTargetSelected方法(如此处:ActionBarSherlock - Share Content icon issue)。但额外的图标停留在那里......这是我的代码:

@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重写一些类,以防止它显示额外的图标(如:How to hide the share action (which use most) icon near the share action provider?)。但是我遇到了这个解决方案的问题,因为我无法从我的自定义类中导入com.actionbarsherlock.widget.ActivityChooserModel(被阻止到外部包)。即使将这个类复制到我的包中,也没有用(app崩溃)......

禁用这个额外的图标看起来很平常,但我无法弄清楚为什么上面的解决方案对我不起作用......

提前感谢任何想法和消息

2 个答案:

答案 0 :(得分:3)

我不知道你是否解决了问题,但我有同样的问题要删除ShareActionProvider的历史记录。我尝试了一切,我找到的答案与你的相同(How to hide the share action icon?) 经过一些研究,我在第二条评论中发现了这个伎俩:
Action Bar Sherlock has depreciated methods

  1. 将ABS中的 3个类ShareActionProviderActivityChooserViewActivityChooverModel)复制/粘贴到您的包中。
  2. 用您自己的包替换您的导入。
  3. 在新if (activityCount > 0 && historySize > 0)中更改if (false)ActivityChooserView (您将收到错误:“setActived”不适用于您当前的版本)
  4. 保存并关闭课程。
  5. android:actionProviderClass="com.myapp.ShareActionProvider"
  6. 替换menu.xml中的课程
  7. Manifest中,将minSdkVersion等于11.保存项目。打扫。
  8. 返回Manifest,用您使用的旧minSdkVersion替换{{1}}。保存并清洁。
  9. 完美无缺。如果这个提示解决了您的问题,请告诉我。

答案 1 :(得分:0)

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