0
0
Android Kotlinmobile~20 mins

Navigating between composables in Android Kotlin - Practice Problems & Coding Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
Compose Navigation Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
navigation
intermediate
2:00remaining
What is the output when navigating between two composables?
Consider two composables: HomeScreen and DetailScreen. When a button in HomeScreen is clicked, the app navigates to DetailScreen. What will be displayed after clicking the button?
Android Kotlin
import androidx.compose.material.*
import androidx.compose.runtime.*
import androidx.navigation.compose.*

@Composable
fun AppNavHost() {
  val navController = rememberNavController()
  NavHost(navController, startDestination = "home") {
    composable("home") {
      Button(onClick = { navController.navigate("detail") }) {
        Text("Go to Detail")
      }
    }
    composable("detail") {
      Text("Detail Screen")
    }
  }
}
AThe screen shows a button labeled 'Go to Detail'. After clicking, it shows text 'Detail Screen'.
BThe app crashes because navigation is not set up correctly.
CThe screen shows text 'Detail Screen' initially and a button after clicking.
DNothing changes on the screen after clicking the button.
Attempts:
2 left
💡 Hint
Think about what composable is shown at the start and what happens on button click.
ui_behavior
intermediate
2:00remaining
What happens if you navigate to the same composable multiple times?
In a Jetpack Compose app, if you navigate repeatedly to the same composable route without popping the back stack, what is the expected behavior?
Android Kotlin
val navController = rememberNavController()

Button(onClick = { navController.navigate("profile") }) {
  Text("Go to Profile")
}

// Assume 'profile' composable is defined in NavHost
AThe back stack is cleared and only one 'profile' composable remains.
BNavigation to the same composable is ignored after the first time.
CThe app crashes due to duplicate composable routes.
DEach navigation adds a new instance of the 'profile' composable to the back stack.
Attempts:
2 left
💡 Hint
Think about how navigation back stack works in Jetpack Compose.
lifecycle
advanced
2:00remaining
Which lifecycle event occurs when navigating away from a composable?
When navigating from Composable A to Composable B using Jetpack Compose Navigation, which lifecycle event is triggered for Composable A?
AComposable A remains active and no lifecycle event occurs.
BComposable A's onCreate is called again.
CComposable A's DisposableEffect's onDispose is called.
DComposable A's onStart is called.
Attempts:
2 left
💡 Hint
Think about how Compose handles cleanup when a composable leaves the screen.
📝 Syntax
advanced
2:00remaining
Which code snippet correctly passes an argument during navigation?
You want to navigate to a composable named 'detail' and pass a userId as an argument. Which code snippet correctly performs this navigation?
AnavController.navigate("detail?userId=$userId")
BnavController.navigate("detail/$userId")
CnavController.navigate("detail", bundleOf("userId" to userId))
DnavController.navigate("detail", arguments = mapOf("userId" to userId))
Attempts:
2 left
💡 Hint
Think about how Jetpack Compose Navigation encodes arguments in routes.
🔧 Debug
expert
3:00remaining
Why does this navigation code cause a crash?
Given the code below, why does the app crash when navigating to 'profile'?
Android Kotlin
NavHost(navController, startDestination = "home") {
  composable("home") { HomeScreen(navController) }
  composable("profile/{userId}") { backStackEntry ->
    val userId = backStackEntry.arguments?.getString("userId")!!
    ProfileScreen(userId)
  }
}

// Navigation call:
navController.navigate("profile")
ANavigation fails because the required 'userId' argument is missing in the route.
BThe composable 'profile/{userId}' is not registered correctly.
CThe NavHost startDestination is invalid.
DThe backStackEntry is null causing a NullPointerException.
Attempts:
2 left
💡 Hint
Check if all required arguments are provided when navigating.