2013-07-19 18 views
43

Sto utilizzando il nuovo DrawerLayout per avere la navigazione laterale. Sto utilizzando l'icona cassetto (la 'hamburger') come questo:Cambia icona del cassetto back to back arrow

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

Tuttavia, quando aggiungo un Fragment al backstack, voglio visualizzare di nuovo la freccia indietro, così l'utente può navigare di nuovo a "home", e solo allora apri il cassetto dell'app.

Come posso ripristinare l'icona del cassetto sull'icona posteriore?
La freccia che voglio:

Navigation Drawer

+1

Vedere la mia risposta qui http://stackoverflow.com/a/29292130/746347 – mixel

risposta

71

Per disabilitare e nascondere la DrawerToggle "Hamburger", basta chiamare

mDrawerToggle.setDrawerIndicatorEnabled(false); 
+2

Grande, che funziona, grazie! – nhaarman

+3

Grazie, puoi anche dire come implementare l'azione di ritorno al clic dopo mDrawerToggle.setDrawerIndicatorEnabled (false)? Sto cercando di tornare al frammento listview dal frammento di dettaglio del contenuto. P.S: posso andare al frammento precedente usando il pulsante Indietro. – adnanyousafch

+2

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

2

ho creato un'interfaccia per l'attività di hosting per aggiornare lo stato di visualizzazione della menu di hamburger. Per i frammenti di livello superiore ho impostato il commutatore su true e per i frammenti per i quali voglio visualizzare la freccia su < Ho impostato l'interruttore su 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); 
    } 
} 

Poi nella mia attività ...

public class MainActivity extends Activity implements SomeFragment.OnFragmentInteractionListener { 

    private ActionBarDrawerToggle mDrawerToggle; 

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

} 
+1

Come posso rendere questo 'generico', quindi si applica a molte classi come 'SomeFragment'? O 'MainActivity' deve implementare ognuno individualmente? – IanB

+0

@IanB, penso che dovresti creare un oggetto di esempio per esempio BaseFragment, implementare quel codice, quindi estendere ogni frammento che vuoi usare con il frammento di base – WardaLyn