简体   繁体   中英

Login - Navigation Architecture Component

I implemented conditional navigation to my LoginFragment, with android navigation architecture component. The problem I facing now, is that I would like to hide the up button on the toolbar, and the disable any in-app navigation while the user is not logged in.

I would like to be able to implement this with a one-activity approach, where the Activity sets up the in app navigation UI and the navController like in the android sunflower demo, and the navigation destinations are Fragments.

I implemented the conditional navigation as discribed here: Navigation Architecture Component - Login screen

How can I properly implement hiding the navigation and the up button on the login screen, with Navigation Architecture Component?

I don't know exactly what you mean by hiding navigation, but I will assume you mean hiding a drawer layout. To hide the up button and lock the drawer add the following to your MainActivity's onCreate. I'm using Kotlin.

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

To make just the up button go away use myToolbar.setNavigationIcon(null) and to make it come back use myToolbar.setNavigationIcon(R.id.my_icon)

My method is adding the login page to the root set

    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)

So when you are on the login page, there is no back button.

System back button can override onBackPressed()

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

Sorry for my English

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM