2014-09-28 13 views
26

Ho un'applicazione che utilizza un cassetto di navigazione che fornisce un elenco di posizioni. Nel cassetto ci sono diverse opzioni (come la scelta di paese, città, ecc.) Che l'utente può configurare prima di mostrare l'elenco corrispondente nell'attività principale.Android su cassetto Listener chiuso

C'è qualche possibilità di aggiornare l'elenco quando l'utente chiude il cassetto, o forse c'è un altro modo per risolvere questo? Ho provato a cercare tutorial ma non ho trovato nulla su questo ascoltatore chiuso a cassetto. Qualsiasi suggerimento sarebbe utile, grazie!

risposta

63

Quando si configura la ActionBarDrawerToggle si può "attuare" le onDrawerClosed e onDrawerOpened callback. Vedere il seguente esempio dal Docs:

mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, 
      R.drawable.ic_drawer, R.string.drawer_open, R.string.drawer_close) { 

     /** Called when a drawer has settled in a completely closed state. */ 
     public void onDrawerClosed(View view) { 
      super.onDrawerClosed(view); 
      // Do whatever you want here 
     } 

     /** Called when a drawer has settled in a completely open state. */ 
     public void onDrawerOpened(View drawerView) { 
      super.onDrawerOpened(drawerView); 
      // Do whatever you want here 
     } 
    }; 
// Set the drawer toggle as the DrawerListener 
mDrawerLayout.addDrawerListener(mDrawerToggle); 

Edit: Ora il setDrawerListener è deprecato, utilizzare addDrawerListener invece.

+0

OMG, mi sono completamente dimenticato di questo! Grazie per averlo ricordato! – rendyhihi

30

risp.Risposta è giusta nel caso si stia utilizzando anche ActionBar. nel caso in cui è sufficiente utilizzare direttamente il DrawerLayout, è possibile aggiungere un DrawerListener ad esso:

View drawerView = findViewById(R.id.drawer_layout); 
if (drawerView != null && drawerView instanceof DrawerLayout) { 
    mDrawer = (DrawerLayout)drawerView; 
    mDrawer.setDrawerListener(new DrawerListener() { 
      @Override 
      public void onDrawerSlide(View view, float v) { 

      } 

      @Override 
      public void onDrawerOpened(View view) { 

      } 

      @Override 
      public void onDrawerClosed(View view) { 
       // your refresh code can be called from here 
      } 

      @Override 
      public void onDrawerStateChanged(int i) { 

      } 
     }); 
} 

Come da kit's comment, addDrawerListener() dovrebbe essere usato ora che setDrawerListener() è stato sconsigliato.

+8

Se qualcuno lo vede, 'setDrawerListener' è deprecato. 'addDrawerListener' dovrebbe essere usato ora – kit