Disabling navigation drawer from fragment

前端 未结 1 460
独厮守ぢ
独厮守ぢ 2020-12-30 03:51

I have an app with a navigation drawer and 4 navigation items (Fragments). In one of the Fragments, I have a tab layout set up with a view pager (3 more Fragments).

相关标签:
1条回答
  • 2020-12-30 04:38

    A clean way to do this is to create an interface that the Activity implements, through which the Fragment can call a method local to the Activity that handles the drawer lock and toggle button states. For example:

    public interface DrawerLocker {
        public void setDrawerEnabled(boolean enabled);
    }
    

    In the Activity's interface method, we simply figure the lock mode constant for the DrawerLayout#setDrawerLockMode() call, and call setDrawerIndicatorEnabled() on the ActionBarDrawerToggle.

    public class MainActivity extends Activity implements DrawerLocker {
    
        public void setDrawerEnabled(boolean enabled) {
            int lockMode = enabled ? DrawerLayout.LOCK_MODE_UNLOCKED :
                                     DrawerLayout.LOCK_MODE_LOCKED_CLOSED;
            drawer.setDrawerLockMode(lockMode);
            toggle.setDrawerIndicatorEnabled(enabled);
        }
    
        ...
    }
    

    In the Fragment, we merely need to cast the hosting Activity to the interface, and call the setDrawerEnabled() method accordingly. For example, to lock the drawer shut:

    ((DrawerLocker) getActivity()).setDrawerEnabled(false);
    

    NB: Since version 23.2.0 of the v7 appcompat support library, ActionBarDrawerToggle respects the DrawerLayout's lock mode, and will not toggle the drawer state if it is locked. This means that it is not strictly necessary to use setDrawerIndicatorEnabled(), though it might be desirable to still do so in order to provide the user a visual indication that the toggle is disabled.

    0 讨论(0)
提交回复
热议问题