2014-11-22 28 views
7

Mam szufladzie nawigacji (appcompat v7) w mojej aplikacji, która działa idealnie dobrze.Android DrawerLayout.setDrawerLockMode() nie działa

Teraz chcę go wyłączyć, dopóki użytkownik nie kupi w aplikacji zakupu, aby odblokować dodatkowe funkcje. Więc w moim Activity.onCreate(), po inicjalizacji szufladę i wypełniania go wzywam tę funkcję:

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED); 

Funkcja ta nie robi nic. Szuflada nadal otwiera się i zamyka normalnie po dotknięciu karata szuflady na pasku czynności. Próbowałem wywoływać tę funkcję w Activity.onResume() bez żadnej różnicy.

Jaki jest prawidłowy sposób korzystania z tej funkcji? (Próbowałem szukać w Internecie odpowiedzi, ale nie mogłem znaleźć niczego, co rozwiązałoby mój problem). Każda pomoc jest doceniana, ponieważ utknąłem w tej kwestii od jakiegoś czasu.

Odpowiedz

5

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);

jest wyłączenie tylko układ otwierania szuflady przesuwając aż kliknij szufladę nawigacji ikonę zachować logiczną zmienną

zapisu mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED); w onStart() a także napisać poniżej linii kodu

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

to zadziała na pewno

+0

Jak myślisz, gdzie ten kod pójdzie? – rgamber

+0

'onOptionsItemSelected' jest wywoływane, gdy element z menu przepełnienia jest wybrany, a nie, gdy element z szuflady nawigacji jest zaznaczony. – rgamber

+0

To dlatego napisałem item.getItemId() == android.R.id.home to jest również wywoływane, gdy przycisk home na szufladzie nawigacji kliknął –

3

Kiedy zadzwonisz setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED) blokuje szufladę otwierającą i zamykającą tylko przez przeciągnięcia.

Po naciśnięciu karata szuflady na pasku akcji szuflada w dalszym ciągu otwiera się i zamyka, ponieważ szuflada nadal reaguje na połączenia z openDrawer(int), closeDrawer(int), mimo że szuflada jest zablokowana. Musisz dodać trochę logiki w listwie przycisków menu akcji i nie wywoływać openDrawer (int), gdy nie chcesz, aby się otwierał.

Btw, to jest w porządku, aby zadzwonić setDrawerLockMode(int) w onСreate