Вход - компонент архитектуры навигации

Я реализовал условную навигацию в моем LoginFragment с компонентом архитектуры навигации Android. Проблема, с которой я столкнулся сейчас, заключается в том, что я хотел бы скрыть кнопку вверх на панели инструментов и отключить любую навигацию в приложении, пока пользователь не вошел в систему.

Я хотел бы иметь возможность реализовать это с помощью подхода с одним действием, где Activity настраивает пользовательский интерфейс навигации в приложении и navController, как в демонстрации подсолнечника Android, а пункты назначения навигации - это фрагменты.

Я реализовал условную навигацию, как описано здесь: Компонент архитектуры навигации - экран входа в систему

Как я могу правильно реализовать скрытие навигации и кнопки вверх на экране входа в систему с помощью компонента архитектуры навигации?




Ответы (2)


Я не знаю точно, что вы имеете в виду, говоря о сокрытии навигации, но предполагаю, что вы имеете в виду скрытие макета ящика. Чтобы скрыть кнопку вверх и заблокировать ящик, добавьте следующее в файл onCreate MainActivity. Я использую Котлин.

myNavController.addOnDestinationChangedListener { _, destination ->
    if (destination.id == R.id.loginFragment) {
        myDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED)
        myToolbar.setVisibility(View.GONE)
    } else {
        myDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED)
        myToolbar.setVisibility(View.VISIBLE)
    }

Чтобы убрать кнопку «вверх», используйте myToolbar.setNavigationIcon(null), а чтобы она вернулась, используйте myToolbar.setNavigationIcon(R.id.my_icon)

person AaronJ    schedule 10.12.2018

Мой метод добавляет страницу входа в корневой набор

    val navController = findNavController(R.id.main_nav_host)
    val appBarConfiguration = AppBarConfiguration(setOf(R.id.home_dest, 
        R.id.user_dest,R.id.login_dest))
    toolbar.setupWithNavController(navController, appBarConfiguration)

Поэтому, когда вы находитесь на странице входа в систему, кнопки возврата нет.

Системная кнопка возврата может переопределить onBackPressed ()

  override fun onBackPressed() {
    if (findNavController(R.id.main_nav_host).currentDestination?.id != R.id.next_dest)
      super.onBackPressed()
    }
  }

Извините за мой английский

person Scmile    schedule 08.03.2019