2014-10-29 19 views
7

Tak, mam BaseActivity, w którym mam pasek narzędzi i nazywam setSupportActionBar (pasek narzędzi).Zestaw pasków narzędzi AndroidNawigacjaIcon nie działa

W niektórych moich działaniach, które rozszerzają BaseActivity, chciałbym zmienić ikonę nawigacji (domyślna strzałka) na inną losową. Ale kiedy zadzwonię do toolbar.setNavigationIcon (myDrawable), to nie działa, nadal pokazuje domyślną ikonę strzałki w lewo.

Każdy pomysł? Dzięki.

+0

Powiel możliwe: http://stackoverflow.com/questions/26525229/toolbar-navigation-icon-never-set – Abdellah

Odpowiedz

39

myślę, że można ustawić tak jak to

menuDrawerToggle = new ActionBarDrawerToggle(this, menuDrawer, toolbar, R.string.drawer_open, R.string.drawer_close){...} 

    menuDrawerToggle.syncState(); 

    toolbar.setNavigationIcon(getResources().getDrawable(yourDrawable)); 

put setNavigationIcon po syncState()

+2

WTF!?!? Nigdy bym tego nie znalazł, jak do cholery to wymyśliłeś? Rzuciłbym ci kilka powtórzeń, gdybym wiedział jak. – Anthony

+0

Jak to ma tylko (teraz 7) głosów. Świetne znalezisko !! –

+0

Świetna odpowiedź. Nie mogę tego uwierzyć –

1

w moim przypadku: Nie znam używać ActionBarDrawerToggle. Dla mnie pomocne było: zmienić kolejność wywołań metod.

Od:

Toolbar toolbar = (Toolbar)getActivity().findViewById(R.id.toolbar); 
((AppCompatActivity)getActivity()).setSupportActionBar(toolbar); 
toolbar.setNavigationIcon(R.drawable.ic_chevron_left_white_24dp); 

Do:

Toolbar toolbar = (Toolbar)getActivity().findViewById(R.id.toolbar); 
toolbar.setNavigationIcon(R.drawable.ic_chevron_left_white_24dp); 
((AppCompatActivity)getActivity()).setSupportActionBar(toolbar); 
0

W moim przypadku setNavigationIcon po syncState jak nie @Hsieh pracy! Moje rozwiązanie jest ustawione w metodzie onPostCreate, jak poniżej. zastąpić tę metodę w swojej działalności

@Override 
    protected void onPostCreate(@Nullable Bundle savedInstanceState) { 
     super.onPostCreate(savedInstanceState); 
     mToolbar.setNavigationIcon(R.drawable.ic_menu_button); 
    }