2013-07-19 18 views
43

Używam nowego DrawerLayout do nawigacji bocznej. Używam ikonę szuflady (zwanego dalej „hamburger”) tak:Zmień ikonę szuflady na powrót strzałka

@Override 
protected void onStart() { 
    super.onStart(); 

    mDrawerLayout = (DrawerLayout) findViewById(R.id.activity_main_drawerlayout); 
    mDrawerToggle = new ActionBarDrawerToggle(
      this, 
      mDrawerLayout, 
      R.drawable.ic_navigation_drawer, 
      R.string.app_name, 
      R.string.app_name); 
    mDrawerLayout.setDrawerListener(mDrawerToggle); 

    getActionBar().setDisplayHomeAsUpEnabled(true); 
    getActionBar().setHomeButtonEnabled(true); 
} 

Jednak kiedy dodać Fragment do backstack, chcę, aby ponownie wyświetlić strzałkę wstecz, dzięki czemu użytkownik może poruszać się z powrotem do "home", a dopiero potem otwórz szufladę aplikacji.

Jak mogę zresetować ikonę szuflady do tylnej ikony?
Strzałka chcę:

Navigation Drawer

+1

Zobacz moją odpowiedź tutaj http://stackoverflow.com/a/29292130/746347 – mixel

Odpowiedz

71

Aby wyłączyć i ukryć DrawerToggle „hamburger”, po prostu zadzwoń

mDrawerToggle.setDrawerIndicatorEnabled(false); 
+2

Wielki, który działa, dzięki! – nhaarman

+3

Dzięki, czy możesz również powiedzieć, jak zaimplementować działanie wycofania po kliknięciu mDrawerToggle.setDrawerIndicatorEnabled (false)? Próbuję wrócić do fragmentu widoku listy z fragmentu szczegółów treści. P.S: Mogę przejść do poprzedniego fragmentu za pomocą przycisku Wstecz. – adnanyousafch

+2

@adnanyousafch http://stackoverflow.com/questions/17258020/switching-between-android-navigation-drawer-image-and-up-carat-when-using-fragme –

2

I stworzył interfejs dla działalności hostingowej zaktualizować stan widok na menu hamburgera. W przypadku fragmentów najwyższego poziomu ustawiam przełącznik na true, a dla fragmentów, dla których chcę wyświetlić strzałkę w górę <, ustawiam przełącznik na false.

public class SomeFragment extends Fragment { 

    public interface OnFragmentInteractionListener { 
     public void showDrawerToggle(boolean showDrawerToggle); 
    } 

    private OnFragmentInteractionListener mListener; 

    @Override 
    public void onAttach(Activity activity) { 
     super.onAttach(activity); 
     try { 
      this.mListener = (OnFragmentInteractionListener) activity; 
     } catch (ClassCastException e) { 
      throw new ClassCastException(activity.toString() + " must implement OnFragmentInteractionListener"); 
     } 
    } 

    @Override 
    public void onResume() { 
     super.onResume(); 
     mListener.showDrawerToggle(false); 
    } 
} 

Wtedy w mojej działalności ...

public class MainActivity extends Activity implements SomeFragment.OnFragmentInteractionListener { 

    private ActionBarDrawerToggle mDrawerToggle; 

    public void showDrawerToggle(boolean showDrawerIndicator) { 
     mDrawerToggle.setDrawerIndicatorEnabled(showDrawerIndicator); 
    } 

} 
+1

Jak mogę zrobić to "ogólne", więc odnosi się do wielu klas, takich jak 'SomeFragment'? Czy też "MainActivity" musi implementować każdy indywidualnie? – IanB

+0

@IanB, myślę, że powinieneś utworzyć someclass na przykład BaseFragment, zaimplementuj ten kod, a następnie rozszerz każdy fragment, który chcesz użyć tego interfejsu z Fragmentem Podstawowym – WardaLyn

Powiązane problemy