Показать / скрыть DrawerLayout зависит от текущего фрагмента

У меня есть класс Activity , у которого есть DrawerLayout . Этот макет показывает список в Drawer и позволяет пользователю переключаться между fragments . В этих Fragments есть некоторые URL-адреса, и когда пользовательский клик по этому WebviewFragment , будет показан WebviewFragment . Однако я не хочу показывать DrawerLayout в WebViewFragment . Вместо этого я бы предпочел, чтобы пользователь перенаправлялся к предыдущему Fragment .

Есть ли способ показать / скрыть DrawerLayout зависит от того, что представляет собой текущий Fragment ? Я пытаюсь вызвать mDrawerLayout.setVisibility(View.GONE ), но кажется, что он не является полным. По крайней мере ActionBar значок ActionBar по-прежнему представляет собой значок ящика.

Вы можете использовать этот метод для блокировки или разблокировки ящика: DrawerLayout.setDrawerLockMode(...) . (Есть также две другие версии этого метода, чтобы указать режим блокировки для определенных ящиков.) Чтобы заблокировать, используйте DrawerLayout.LOCK_MODE_LOCKED_CLOSED ; Для разблокировки используйте DrawerLayout.LOCK_MODE_UNLOCKED .

Если вы используете ActionBarDrawerToggle, вам нужно добавить дополнительный код, чтобы предотвратить открытие ящика при нажатии на ActionBarDrawerToggle, если вы заблокировали ящик.

 @Override public boolean onOptionsItemSelected(MenuItem item) { // check lock mode before passing to ActionBarDrawerToggle // I assume your drawer is on the left; if not, use Gravity.RIGHT int lockMode = mDrawer.getDrawerLockMode(Gravity.LEFT); if (lockMode == DrawerLayout.LOCK_MODE_UNLOCKED && mDrawerToggle.onOptionsItemSelected(item)) { return true; } // Handle your other action bar items... return super.onOptionsItemSelected(item); } 

Почему бы не открыть новую активность, которая вместо этого имеет только WebView? Затем пользователю нужно будет нажать кнопку «Назад», чтобы вернуться к Activity с помощью DrawerLayout, и тогда проблем не возникнет.

Кроме того, вам не нужно иметь такой вид деятельности самостоятельно, вы можете позволить Android найти браузер для их открытия вместо этого с помощью этого кода:

 Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("HTTP_URL_GOES_HERE")); startActivity(intent);