Bird
Raised Fist0
Android Kotlinmobile~20 mins

NavHost and NavController in Android Kotlin - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Navigation Mastery Badge
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ ui_behavior
intermediate
2:00remaining
What happens when you call navigate() on NavController?
Given a NavController instance, what is the immediate effect of calling navController.navigate(R.id.destinationFragment) in an Android app?
Android Kotlin
navController.navigate(R.id.destinationFragment)
AThe app closes the current activity and opens a new one.
BThe app reloads the current fragment without changing the UI.
CThe app navigates to the fragment with ID destinationFragment and adds it to the back stack.
DThe app throws a runtime exception because navigate() requires a Bundle argument.
Attempts:
2 left
💡 Hint
Think about what navigation means in a single-activity app using fragments.
❓ lifecycle
intermediate
2:00remaining
When is NavHostFragment created in the activity lifecycle?
In an Android app using Navigation Component, at which point in the activity lifecycle is the NavHostFragment typically created and attached?
ADuring the activity's onCreate() when setContentView() inflates the layout containing NavHostFragment.
BOnly after onStart() is called on the activity.
CAfter onResume() when the UI is fully visible.
DNavHostFragment is created before the activity's onCreate() method.
Attempts:
2 left
💡 Hint
Think about when views are created from XML layouts.
📝 Syntax
advanced
2:00remaining
Identify the correct way to obtain NavController in a fragment
Which Kotlin code snippet correctly obtains the NavController inside a fragment?
Aval navController = Navigation.findNavController(activity, R.id.nav_host_fragment)
Bval navController = findNavController()
Cval navController = NavHostFragment.findNavController(this)
Dval navController = NavController(this)
Attempts:
2 left
💡 Hint
Remember the extension function available in fragments.
🔧 Debug
advanced
2:00remaining
Why does navigation crash with IllegalArgumentException?
You call navController.navigate(R.id.action_to_unknown) but the app crashes with IllegalArgumentException: navigation destination unknown. What is the most likely cause?
Android Kotlin
navController.navigate(R.id.action_to_unknown)
AThe destination ID action_to_unknown is not defined in the navigation graph XML.
BThe NavController instance is null at the time of navigation.
CThe app is missing internet permission in the manifest.
DThe fragment is not attached to the activity.
Attempts:
2 left
💡 Hint
Check your navigation graph XML for the destination ID.
🧠 Conceptual
expert
3:00remaining
How does NavHostFragment manage back stack differently than FragmentManager?
What is a key difference in how NavHostFragment manages the back stack compared to directly using FragmentManager transactions?
ANavHostFragment requires explicit calls to popBackStack(), FragmentManager does not.
BNavHostFragment does not support back stack at all, unlike FragmentManager.
CFragmentManager automatically handles deep links, but NavHostFragment does not.
DNavHostFragment uses a centralized navigation graph to manage destinations and back stack, while FragmentManager requires manual transaction management.
Attempts:
2 left
💡 Hint
Think about the role of the navigation graph in Navigation Component.

Practice

(1/5)
1. What is the main role of NavHost in Android navigation?
easy
A. It displays the current screen inside a container.
B. It handles network requests between screens.
C. It stores user data for the app.
D. It manages background services.

Solution

  1. Step 1: Understand NavHost purpose

    NavHost is a container that shows the current screen (fragment) in your app.
  2. Step 2: Compare options

    Only It displays the current screen inside a container. correctly describes NavHost's role as a screen container.
  3. Final Answer:

    It displays the current screen inside a container. -> Option A
  4. Quick Check:

    NavHost = Screen container [OK]
Hint: NavHost is like a window showing your current screen [OK]
Common Mistakes:
  • Confusing NavHost with NavController
  • Thinking NavHost manages data or services
  • Assuming NavHost handles navigation logic
2. Which of the following is the correct way to get a NavController inside a Fragment?
easy
A. val navController = getNavHost()
B. val navController = NavController()
C. val navController = findNavController()
D. val navController = NavigationHost()

Solution

  1. Step 1: Recall NavController retrieval method

    In a Fragment, the standard way is to call findNavController() extension function.
  2. Step 2: Check other options

    The other options are invalid or do not exist in Android navigation API.
  3. Final Answer:

    val navController = findNavController() -> Option C
  4. Quick Check:

    Use findNavController() in Fragment [OK]
Hint: Use findNavController() to get NavController in Fragment [OK]
Common Mistakes:
  • Trying to instantiate NavController directly
  • Using wrong method names like getNavHost()
  • Confusing NavHost with NavController
3. Given this code inside a Fragment:
findNavController().navigate(R.id.action_home_to_detail)

What happens when this code runs?
medium
A. The app restarts the Home screen.
B. The app navigates from Home screen to Detail screen.
C. The app closes the current screen.
D. The app shows an error because navigate() needs a string.

Solution

  1. Step 1: Understand navigate() usage

    The navigate() method moves the app to the destination defined by the action ID.
  2. Step 2: Interpret the action ID

    R.id.action_home_to_detail is an action from Home to Detail screen in navigation graph.
  3. Final Answer:

    The app navigates from Home screen to Detail screen. -> Option B
  4. Quick Check:

    navigate(actionId) moves between screens [OK]
Hint: navigate() with action ID moves to target screen [OK]
Common Mistakes:
  • Thinking navigate() closes or restarts screens
  • Assuming navigate() requires a string route
  • Confusing action IDs with fragment IDs
4. What is wrong with this code snippet inside a Fragment?
val navController = NavController()
navController.navigate(R.id.action_main_to_settings)
medium
A. NavController must be declared as lateinit var.
B. navigate() requires a string route, not an ID.
C. The action ID is invalid inside a Fragment.
D. NavController cannot be instantiated directly with constructor.

Solution

  1. Step 1: Check NavController instantiation

    NavController is obtained via findNavController(), not by calling constructor.
  2. Step 2: Validate navigate() usage

    Using an action ID with navigate() is correct; no string needed.
  3. Final Answer:

    NavController cannot be instantiated directly with constructor. -> Option D
  4. Quick Check:

    NavController is retrieved, not created [OK]
Hint: Never create NavController with constructor; use findNavController() [OK]
Common Mistakes:
  • Trying to create NavController with new keyword or constructor
  • Confusing action IDs with string routes
  • Misunderstanding lateinit usage
5. You want to navigate from Screen A to Screen B and pass a user ID as an argument using NavController. Which approach correctly achieves this?
hard
A. val action = ScreenADirections.actionScreenAToScreenB(userId) findNavController().navigate(action)
B. findNavController().navigate(R.id.screenB, bundleOf(userId))
C. val navController = NavController() navController.navigate(R.id.screenB)
D. Use Intent to start Screen B with extras.

Solution

  1. Step 1: Understand safe args usage

    Using generated directions class with arguments is the recommended way to pass data safely.
  2. Step 2: Compare other options

    Using Intent bypasses the Navigation Component. Passing a bundle without proper key-value pair syntax is invalid. Instantiating NavController directly fails.
  3. Final Answer:

    val action = ScreenADirections.actionScreenAToScreenB(userId) findNavController().navigate(action) -> Option A
  4. Quick Check:

    Safe args = directions class + navigate(action) [OK]
Hint: Use generated directions class to pass arguments safely [OK]
Common Mistakes:
  • Instantiating NavController manually
  • Passing arguments without safe args
  • Using Intent instead of NavController for navigation
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard