使用ShareActionProvider时如何关闭共享历史记录?

Que*_*mia 25 android actionbarsherlock android-actionbar shareactionprovider

Android 4.0中可用的新ShareActionProvider(如果您使用的是ActionBarSherlock,则可在早期版本中使用)具有最后使用的项目显示在操作栏中的功能.无论如何要关闭它?

Nis*_*sar 21

对我来说,避免历史图标的最佳解决方案是不使用ShareActionProvider而不是它,将其创建为任何其他操作:

 <item 
    android:id="@+id/menu_action_share"
    android:showAsAction="ifRoom" 
    android:icon="@drawable/ic_action_share"
    android:title="@string/share"/>   
Run Code Online (Sandbox Code Playgroud)

在menu/activity_actions.xml中放置一个带有ic_action_share图标的项目...

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_actions, menu);
    return super.onCreateOptionsMenu(menu);
 }
Run Code Online (Sandbox Code Playgroud)

正常膨胀菜单......

private void actionShare(){
     Intent i = new Intent(Intent.ACTION_SEND);
     i.setType("text/plain");
     i.putExtra(Intent.EXTRA_SUBJECT, "my string");
     i.putExtra(Intent.EXTRA_TEXT, "another string");
     startActivity(i); 
     //Or like above will always display the chooser
     //startActivity(Intent.createChooser(i, getResources().getText(R.string.share))); 
 }
Run Code Online (Sandbox Code Playgroud)

创建一个具有ACTION_SEND意图的方法

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case R.id.menu_item_share:
            actionShare();
            return true;
        default:
            return super.onOptionsItemSelected(item);
        }
    }
Run Code Online (Sandbox Code Playgroud)

最后从onOptionsItemSelected调用此方法

更多信息 - >将简单数据发送到其他应用程序


sve*_*ier 13

自己开始分享活动:

shareActionProvider.setShareIntent(intent);
shareActionProvider.setOnShareTargetSelectedListener(this);

@Override
public boolean onShareTargetSelected(ShareActionProvider source, Intent intent) {
    // start activity ourself to prevent search history
    context.startActivity(intent);
    return true;
}
Run Code Online (Sandbox Code Playgroud)

然后,ShareActionProvider不会将所选活动添加到共享历史记录中.

  • 我不确定这对别人有用.当使用v7 compat库时,它仍会因`java.lang.IllegalStateException而崩溃:之前没有调用#readHistoricalData`.此外,文档清楚地说明了这个`onShareTargetSelected`:"注意:你不应该在这里处理意图.这个回调旨在通知客户端正在执行共享,因此客户端可以在必要时更新UI.返回结果被忽略.总是返回false以保持一致性." (8认同)

Jak*_*ton 3

没有 API 可以执行此操作。然而,该类非常简单,您可以很容易地创建自己的版本,而ShareActionProvider不会保留历史记录。您只需使用其他一些排序方式(例如,按字母顺序)来确定可能目标的排序顺序。

  • 问题是,我想保留历史记录,但仅限于下拉菜单中。添加额外的图标很烦人,而且它不再适合在栏中。 (6认同)
  • @phreakhead看看我的答案 - http://stackoverflow.com/a/17290249/1446466。它会帮助你的需要。 (2认同)