2013-09-26 13 views
5

Używam ActionBarSherlock w moim projekcie, a chcesz ustawić przycisk współdzielenia, aby dodawać treści na FB etc etc ... I że osiągnięte w ten sposób: Adding items to action bar (using ActionBarSherlock)Usuń dodatkową ikonę na actionbar (przy użyciu ShareActionProvider i ActionBarSherlock)

Jak być może wiesz, ShareActionProvider dodaje drugą ikonę z najczęściej używaną opcją udostępniania. Oznacza to, że na moim pasku akcji pojawia się ikona innej aplikacji i chcę temu zapobiec ... Widziałem 2 możliwe rozwiązania tego problemu i niestety oba te problemy mi nie pomogły:/

Pierwsza próba był w mojej klasie docelowej, do wdrożenia OnShareTargetSelectedListener i zastąpić onShareTargetSelected metodę (jak tutaj: ActionBarSherlock - Share Content icon issue). Ale ekstra ikona pozostaje tam ... tutaj jest mój kod:

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

Druga próba była przepisać kilka klas z ActionBarSherlock, aby zapobiec wyświetlaniu dodatkowych ikony (jak tutaj: How to hide the share action (which use most) icon near the share action provider?). Ale mam problemy z tym rozwiązaniem, ponieważ nie mogłem zaimportować com.actionbarsherlock.widget.ActivityChooserModel z moich niestandardowych klas (zablokowane do zewnętrznych pakietów). Nawet skopiowanie tej klasy do mojego pakietu nie zadziałało (awarie aplikacji) ...

Wygląda na to, że jest całkiem zwyczajną rzeczą, aby wyłączyć tę dodatkową ikonę, ale nie mogłem zrozumieć, dlaczego powyższe rozwiązania nie ". t pracował dla mnie ...

Dzięki z góry za wszelkie pomysły i sugestie

+0

Twoim drugim rozwiązaniem jest podejście, które polecam. "Nawet skopiowanie tej klasy do mojego pakietu nie zadziałało (awarie aplikacji)" - użyj LogCat, aby sprawdzić ślad stosu Java związany z awarią. "Wygląda na to, że to całkiem zwyczajna rzecz, aby wyłączyć tę dodatkową ikonę" - a twoim dowodem na to jest ... co, dokładnie? – CommonsWare

Odpowiedz

3

ja nie wiem, czy rozwiązać problem, ale miałem ten sam problem, aby usunąć historię ShareActionProvider. Próbowałem wszystkiego, a bliskie odpowiedzi, które znalazłem, były takie same jak Ty (How to hide the share action icon?).
Po niektórych badań, znalazłem ten trick na drugim komentarzu:
Action Bar Sherlock has depreciated methods

  1. Kopiuj/Wklej 3 klas (ShareActionProvider, ActivityChooserView i ActivityChooverModel) z ABS do Twojego pakietu.
  2. Wymień import o twoich z własnego pakietu.
  3. Zmień linię if (activityCount > 0 && historySize > 0) przez if (false) w nowym ActivityChooserView.
    (Otrzymasz komunikat o błędzie: "setActived" nie jest dostępny dla bieżącej wersji)
  4. Zapisz i zamknij klasę.
  5. Wymień klasy w menu.xml swój przedmiot przez android:actionProviderClass="com.myapp.ShareActionProvider"
  6. W swojej Manifest sprawiają, że minSdkVersion równa 11. Zapisz projekt. Wyczyść to.
  7. powrócić do Manifest, wymień minSdkVersion przez starego użyłeś. Zapisz i wyczyść.

To działa doskonale. Daj mi znać, jeśli ta porada rozwiązała Twój problem.

+0

robiąc to samo Otrzymuję błąd w ShareActionProvider rozszerza ActionProvider ?? jak to naprawić –

+0

Jaki jest dokładny błąd, który otrzymujesz, @KingofMasses? Może musisz wysłać do tego pokrewne pytanie i wyjaśnić więcej swojego problemu. – Fllo

+0

actully nie jestem w stanie zaimportować com.android.internal.R; .. Jakąkolwiek pomoc? @Fllo Moim celem jest bez wysyłania pytanie chcę go wyśledzić !! –

0

1) Powyższe rozwiązanie FLLO Dokładnie działa dla mnie, a także 2) można po prostu zaimportować bibliotekę ActionbarSherlock i używać jej, aby nie było potrzeby edytowania kodu, jak wyżej. Ale mój punkt widzenia jest lepszy niż rozwiązanie 1).Ponieważ w najnowszej wersji używali ActionBarCompat

Powiązane problemy