risposta

12

Se si desidera conservare tutti i dati di cronologia delle azioni modello, ma semplicemente non si desidera l'ulteriore "attività di condivisione predefinita" icom. La risposta a How do you turn off share history when using ShareActionProvider? non è abbastanza buona.

Che cosa si dovrebbe fare è:

  • Copia queste classi dalla ActionBarSherlock al codice del progetto
    • ShareActionProvider.java
    • ActivityChooserView.java
  • A vostra ShareActionProvider. classe java, importa ActivityChooserView.java che hai appena copiato invece del percorso del file ActionBarShelock
  • Al ActivityChooserView.java -
    • trovare la linea if (activityCount > 0 && historySize > 0)
    • sostituire questa linea con if (false)(è abbastanza brutto, ma è la soluzione più rapida. è possibile approfondire il codice per rimuovere tutte le occorrenze di attuazione DefaultActivity)

Edit: Non dimenticare di impostare il nuovo ActionProvider alla voce di menu, da XML sarebbe simile: android:actionProviderClass="com.*.CustomShareActionProvider"

Questo è tutto!

+0

Mi manca qualcosa, perché ora non posso implementare ActivityChooserModelClient? – whitfin

+0

Inoltre (il mio male per non modificare in precedenza); se si abbandona l'attività con ActionProvider e si ritorna ad esso, verrà visualizzata una casella vuota [] dove un'icona sarebbe normalmente. – whitfin

+1

Ho avuto problemi con questa soluzione. Impossibile importare com.actionbarsherlock.widget.ActivityChooserModel dalle mie classi personalizzate (bloccato sui pacchetti esterni). Anche se ho copiato questa classe sul mio pacchetto, non ha funzionato (l'app si blocca):/ –

4

In base alla risposta di Sean, ho creato le classi necessarie, è possibile copiarle nel progetto (https://gist.github.com/saulpower/10557956). Questo non solo aggiunge la possibilità di disattivare la cronologia, ma anche di filtrare le app con le quali vorresti condividere (se conosci il nome del pacchetto).

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

Ho trovato un modo per ovviare a questo. Sto usando la libreria di supporto 23.0.1, non l'ho testato su altre versioni della libreria di supporto.

La soluzione è semplice, quando si crea ShareActionProvider, basta sovrascrivere il metodo onCreateActionView() e restituire null per esso. Quindi puoi tracciare tutta la cronologia nel menu popup, ma la cronologia non verrà mostrata nella barra degli strumenti.

Ecco un esempio di codice:

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

Attualmente non ho trovato alcun problema utilizzando questa soluzione.

+1

Questa è la risposta corretta a partire dal 2016. – VSG24

+0

Sono testimone del (quasi) Q4 del 2017, questo in effetti elimina la storia, sotto supporto libreria versione 26.0.1. – Xhezairi

Problemi correlati