cevap

12

'a erişmek isterseniz, tüm paylaşım geçmişi veri modelini saklayın, ancak yalnızca ekstra "varsayılan paylaşım etkinliği" ni istemiyorum icom. How do you turn off share history when using ShareActionProvider?'daki yanıt yeterince iyi değil.

Ne yapmalıyım:

  • Kopya proje koduna ActionBarSherlock bu sınıflar
    • ShareActionProvider.java sizin ShareActionProvider anda
    • ActivityChooserView.java
  • . java sınıfı, ActionBarShelock dosya konumu yerine kopyaladığınız ActivityChooserView.java dosyasını içe aktarın ActivityChooserView.java anda
  • -
    • oldukça çirkin (if (false)ile bu satırı değiştirin hattını if (activityCount > 0 && historySize > 0)
    • bulmak, ama en çabuk bir düzeltme. Eğer DefaultActivity uygulamasının tüm oluşumlarını)
    kaldırmak için koduna defterleri olabilir

Düzenleme: o şekilde görünecektir XML, menü öğesine yeni ActionProvider ayarlamak unutmayın: android:actionProviderClass="com.*.CustomShareActionProvider"

Bu kadar!

+0

Ben bir şey eksik, çünkü ActivityChooserModelClient şimdi uygulayamıyorum? – whitfin

+0

Ayrıca (daha önce düzenleme yapmak benim için kötü); Eğer aktiviteyi ActionProvider ile bırakır ve ona geri dönerseniz, bir simgenin normal olacağı boş bir [] kutu görürsünüz. – whitfin

+1

Bu çözümle ilgili sorun yaşıyorum. Com.actionbarsherlock.widget.ActivityChooserModel özel sınıflarımdan (dış paketlere engellendi) alınamadı. Bu sınıfı pakete bile kopyaladığım halde, çalışmadı (uygulama çöktü):/ –

4

Sean'ın cevabını temel alarak gerekli sınıfları oluşturdum, bunları projenize kopyalayabilirsiniz (https://gist.github.com/saulpower/10557956). Bu, yalnızca geçmişi kapatmak için değil, paylaşmak istediğiniz uygulamaları filtrelemek için de (paket adını biliyorsanız) ekler.

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

Bunun için bir yol buldum. 23.0.1 destek kitaplığını kullanıyorum, bunu diğer destek kitaplığı sürümlerinde test etmedim.

ShareActionProvider oluşturduğunuzda çözüm, kolaydır, sadece onCreateActionView() yöntemini geçersiz kılın ve bunun için boş değer döndürün. Ardından, açılır menüdeki tüm geçmişi takip edebilirsiniz, ancak tarih, araç çubuğunda gösterilmeyecektir. Şu anda etrafta bu işi kullanarak herhangi bir sorun bulamadı

@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; 
} 

: Burada

bir kod örneğidir.

+1

2016'dan itibaren doğru cevap budur. – VSG24

+0

(neredeyse) 2017'nin 4. çeyreğinden bir tanık olduğum için, bu gerçekten tarih sahnesinden uzaklaşıyor. destek kütüphanesi sürümü 26.0.1. – Xhezairi