2014-11-22 22 views
7

Ho un cassetto di navigazione (appcompat v7) nella mia app che funziona perfettamente bene.Android DrawerLayout.setDrawerLockMode() non funzionante

Ora voglio disabilitarlo, finché l'utente compra un acquisto in-app per sbloccare funzionalità aggiuntive. Così nel mio Activity.onCreate(), dopo aver inizializzato il cassetto e lo ha popolato, io chiamo questa funzione:

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED); 

Questa funzione non sta facendo nulla. Il cassetto continua ad aprirsi e chiudersi normalmente dopo aver toccato il cassetto nella barra di azione. Ho provato a chiamare questa funzione in Activity.onResume() senza alcuna differenza.

Qual è il modo corretto di utilizzare questa funzione? (Ho provato a cercare online le risposte, ma non ho trovato nulla che risolva il mio problema). Qualsiasi aiuto è apprezzato, poiché sono bloccato su questo problema da un po 'di tempo.

risposta

5

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);

è la disabilitazione solo il layout cassetto apertura scorrendo fino a che fa clic cassetto navigazione icona mantenere un valore booleano variabile

scrittura mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED); in onStart() e anche scrivere sotto le righe di codice

@Override 
    public boolean onOptionsItemSelected(android.view.MenuItem item) { 

     if(!disabled) 
     { 
     if (item.getItemId() == android.R.id.home) { 

      if (mDrawerLayout.isDrawerOpen(mDrawerLinearLayout)) { 
       mDrawerLayout.closeDrawer(mDrawerLinearLayout); 
      } else { 
       mDrawerLayout.openDrawer(mDrawerLinearLayout); 
      } 
     } 
     } 
     return super.onOptionsItemSelected(item); 
    } 

funzionerà sicuramente

+0

Dove pensi che questo codice dovrebbe andare? – rgamber

+0

'onOptionsItemSelected' viene chiamato quando viene selezionata una voce dal menu Overflow, non quando viene selezionata una voce dal Navigation Drawer. – rgamber

+0

Ecco perché ho scritto item.getItemId() == android.R.id.home è chiamato anche quando il pulsante Home sul pannello di navigazione ha fatto clic su –

3

Quando si chiama setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED) blocca il cassetto di apertura e chiusura solo con il numero di passaggio.

Il cassetto continua ad aprirsi e chiudersi normalmente dopo aver toccato il cassetto nella barra delle operazioni perché il cassetto risponde ancora alle chiamate a openDrawer(int), closeDrawer(int) sebbene un cassetto sia bloccato. È necessario aggiungere un po 'di logica nel listener del pulsante del menu della barra delle azioni e non chiamare openDrawer (int) quando non si desidera che si apra.

Btw, è bene chiamare setDrawerLockMode(int) in onСreate

Problemi correlati