2013-09-26 15 views
5

Sto usando ActionBarSherlock nel mio progetto, e si desidera impostare un pulsante di condivisione per inviare contenuti a FB ecc ecc ... ho realizzato che in questo modo: Adding items to action bar (using ActionBarSherlock)Remove extra a ActionBar (quando si utilizza ShareActionProvider e ActionBarSherlock)

Come forse saprai, ShareActionProvider aggiunge una seconda icona con l'opzione più utilizzata per la condivisione. Ciò significa che un'icona di un'altra app appare nella mia barra delle azioni, e voglio evitare questo comportamento ... Ho visto 2 possibili soluzioni per questo, e sfortunatamente entrambe non mi hanno funzionato:/

Il primo tentativo era, nella mia classe di destinazione, implementare OnShareTargetSelectedListener e sovrascrivere suShareTargetSelected metodo (come qui: ActionBarSherlock - Share Content icon issue). Ma l'icona in più rimane là ... qui è il mio codice:

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

Il secondo tentativo è stato quello di riscrivere alcune classi da ActionBarSherlock, per evitare che mostra l'icona extra (come qui: How to hide the share action (which use most) icon near the share action provider?). Ma ho avuto problemi con questa soluzione, dato che non sono riuscito a importare com.actionbarsherlock.widget.ActivityChooserModel dalle mie classi personalizzate (bloccate su pacchetti esterni). Anche se ho copiato questa classe nel mio pacchetto, non ha funzionato (l'app si blocca) ...

Sembra che sia una cosa abbastanza usuale per disabilitare questa icona extra, ma non sono riuscito a capire perché le soluzioni precedenti non l'hanno fatto t ha lavorato per me ...

Grazie in anticipo per tutte le idee e le sugestions

+0

La seconda soluzione è l'approccio che consiglio. "Persino copiare questa classe sul mio pacchetto, non ha funzionato (l'app si blocca)": usa LogCat per esaminare la traccia dello stack Java associata al tuo arresto anomalo. "Sembra che sia una cosa abbastanza usuale per disabilitare questa icona extra" - e la tua prova di ciò è ... cosa, esattamente? – CommonsWare

risposta

3

non so se risolto il problema, ma ho avuto lo stesso problema di rimuovere storia ShareActionProvider. Ho provato di tutto e la risposta più vicina che ho trovato era la stessa di te (How to hide the share action icon?).
Dopo alcune ricerche, ho trovato questo trucco sul secondo commento:
Action Bar Sherlock has depreciated methods

  1. copia/incolla il 3 classi (ShareActionProvider, ActivityChooserView e ActivityChooverModel) da ABS per il pacchetto.
  2. Sostituisci l'importazione con il tuo pacchetto.
  3. Modificare la riga if (activityCount > 0 && historySize > 0) entro il if (false) nel nuovo ActivityChooserView.
    (Verrà visualizzato un messaggio di errore: "setActived" non è disponibile per la versione corrente)
  4. Salvarlo e chiudere la classe.
  5. Sostituire la classe nel vostro menu.xml vostro articolo dal android:actionProviderClass="com.myapp.ShareActionProvider"
  6. Nella tua Manifest, rendono il minSdkVersion uguale a 11. Salvare il progetto. Puliscilo.
  7. Torna al tuo Manifest, sostituisci il tuo minSdkVersion con quello vecchio che hai usato. Salva e pulisci.

Funziona perfettamente. Fammi sapere se questo suggerimento ha risolto il tuo problema.

+0

mentre sto facendo lo stesso sto ricevendo errore su ShareActionProvider estende ActionProvider ?? come risolverlo –

+0

Qual è l'errore esatto che ottieni, @KingofMasses? Forse hai bisogno di inviare una domanda correlata a questo, e spiegare più il tuo problema. – Fllo

+0

actully non riesco a importare com.android.internal.R; .. Qualche aiuto? @Fllo Il mio obiettivo è di non pubblicare una domanda che voglio rintracciare !! –

0

1) The Above Solution by FLLO Funziona esattamente per me e anche 2) puoi semplicemente importare la libreria ActionbarSherlock e usarla in modo che non sia necessario modificare il codice come menzionato sopra. Ma il mio punto di vista è meglio andare con la soluzione 1) ....Perché nell'ultima versione hanno utilizzato ActionBarCompat