回答

12

如果您想保留所有共享歷史數據模型,但只是不想額外的「默認共享活動」icom。 How do you turn off share history when using ShareActionProvider?的答案不夠好。

你應該做的是:

  • 複製這些類從ActionBarSherlock到您的項目代碼
    • ShareActionProvider.java
    • ActivityChooserView.java
  • 在你ShareActionProvider。 java類,導入您剛剛複製的ActivityChooserView.java,而不是ActionBarShelock文件位置
  • 在ActivityChooserView.java -
    • 找到行if (activityCount > 0 && historySize > 0)
    • if (false)替換該行(這是很醜陋,但它是最快的修復。你可以深入到代碼以刪除DefaultActivity實施的所有實例)

編輯: 不要忘記設置新ActionProvider到你的菜單項,從XML它會是什麼樣子: android:actionProviderClass="com.*.CustomShareActionProvider"

就是這樣!

+0

我錯過了什麼,因爲我現在無法實現ActivityChooserModelClient? – whitfin

+0

另外(我之前沒有編輯過的不好);如果您使用ActionProvider離開活動並返回到該活動,您將看到一個空的[]框,其中通常會顯示一個圖標。 – whitfin

+1

我遇到了這個解決方案的問題。無法從我的自定義類中導入com.actionbarsherlock.widget.ActivityChooserModel(阻止到外部包)。即使將這個類複製到我的包中,它也不起作用(應用程序崩潰):/ –

4

基於肖恩的答案我創建了必要的課程,您可以將它們複製到您的項目中(https://gist.github.com/saulpower/10557956)。這不僅增加了關閉歷史記錄的功能,而且還可以過濾您想與之共享的應用程序(如果您知道程序包名稱)。

private final String[] INTENT_FILTER = new String[] { 
     "com.twitter.android", 
     "com.facebook.katana" 
}; 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.journal_entry_menu, menu); 

    // Set up ShareActionProvider's default share intent 
    MenuItem shareItem = menu.findItem(R.id.action_share); 

    if (shareItem instanceof SupportMenuItem) { 
     mShareActionProvider = new ShareActionProvider(this); 
     mShareActionProvider.setShareIntent(ShareUtils.share(mJournalEntry)); 
     mShareActionProvider.setIntentFilter(Arrays.asList(INTENT_FILTER)); 
     mShareActionProvider.setShowHistory(false); 
     ((SupportMenuItem) shareItem).setSupportActionProvider(mShareActionProvider); 
    } 

    return super.onCreateOptionsMenu(menu); 
} 
11

我找到了解決這個問題的方法。我正在使用支持庫23.0.1,我沒有在其他支持庫版本上測試過。

解決方案很簡單,當您創建ShareActionProvider時,只需重寫onCreateActionView()方法併爲其返回null即可。然後,您可以在彈出菜單中跟蹤所有歷史記錄,但歷史記錄不會顯示在工具欄中。

下面是一個代碼示例:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuItem item = menu.add(Menu.NONE, R.id.menu_share, Menu.NONE, R.string.share); 
    item.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); 
    mShareActionProvider = new ShareActionProvider(this) { 
     @Override 
     public View onCreateActionView() { 
      return null; 
     } 
    }; 
    item.setIcon(R.drawable.abc_ic_menu_share_mtrl_alpha); 
    MenuItemCompat.setActionProvider(item, mShareActionProvider); 
    return true; 
} 

目前我還沒有發現使用此解決任何問題。

+1

這是2016年的正確答案。 – VSG24

+0

我是(幾乎)2017年第4季度的見證人,這的確確實可以消除歷史事件,支持庫版本26.0.1。 – Xhezairi

相關問題