A NavHost is a container that displays destinations (screens) managed by a NavController. It acts like a frame where different screens appear as you navigate.
Click to reveal answer
beginner
What role does the NavController play in Android navigation?
NavController controls app navigation within a NavHost. It lets you move between screens, handle back actions, and manage navigation state.
Click to reveal answer
intermediate
How do you connect a NavController to a NavHost in Kotlin?
You get the NavController from the NavHostFragment using: val navController = findNavController(R.id.nav_host_fragment). This links navigation actions to the NavHost.
Click to reveal answer
beginner
What is a navigation graph in Android navigation?
A navigation graph is an XML file that defines all possible destinations (screens) and actions (transitions) between them. It guides the NavController on where to go.
Click to reveal answer
intermediate
Why is using NavHost and NavController better than manual fragment transactions?
They simplify navigation by managing the back stack automatically, reducing code, and making navigation predictable and easier to maintain.
Click to reveal answer
What does a NavHost do in an Android app?
AManages network requests
BDisplays the current screen and hosts navigation destinations
CStores user data
DHandles background tasks
✗ Incorrect
A NavHost is a container that shows the current screen and manages navigation destinations.
Which class controls navigation actions like moving between screens?
ANavHost
BViewModel
CFragmentManager
DNavController
✗ Incorrect
NavController handles navigation actions such as moving between destinations.
How do you get a NavController instance in an Activity?
AfindNavController(R.id.nav_host_fragment)
Bnew NavController()
CgetSupportFragmentManager()
DfindViewById(R.id.nav_controller)
✗ Incorrect
You get NavController by calling findNavController with the NavHostFragment's ID.
What file defines the navigation paths and destinations?
Anavigation graph XML
Bstrings.xml
Cstyles.xml
Dlayout.xml
✗ Incorrect
The navigation graph XML defines destinations and navigation actions.
Which benefit does NavController provide over manual fragment transactions?
ABetter UI animations
BFaster network calls
CAutomatic back stack management
DMore memory usage
✗ Incorrect
NavController automatically manages the back stack, simplifying navigation.
Explain how NavHost and NavController work together to manage navigation in an Android app.
Think of NavHost as a stage and NavController as the director.
You got /4 concepts.
Describe the steps to set up navigation using NavHost and NavController in a Kotlin Android app.
Start from layout, then code, then navigation actions.
You got /4 concepts.
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
Step 1: Understand NavHost purpose
NavHost is a container that shows the current screen (fragment) in your app.
Step 2: Compare options
Only It displays the current screen inside a container. correctly describes NavHost's role as a screen container.
Final Answer:
It displays the current screen inside a container. -> Option A
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
Step 1: Recall NavController retrieval method
In a Fragment, the standard way is to call findNavController() extension function.
Step 2: Check other options
The other options are invalid or do not exist in Android navigation API.
Final Answer:
val navController = findNavController() -> Option C
Quick Check:
Use findNavController() in Fragment [OK]
Hint: Use findNavController() to get NavController in Fragment [OK]
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
Step 1: Understand navigate() usage
The navigate() method moves the app to the destination defined by the action ID.
Step 2: Interpret the action ID
R.id.action_home_to_detail is an action from Home to Detail screen in navigation graph.
Final Answer:
The app navigates from Home screen to Detail screen. -> Option B
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
Step 1: Check NavController instantiation
NavController is obtained via findNavController(), not by calling constructor.
Step 2: Validate navigate() usage
Using an action ID with navigate() is correct; no string needed.
Final Answer:
NavController cannot be instantiated directly with constructor. -> Option D
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
Step 1: Understand safe args usage
Using generated directions class with arguments is the recommended way to pass data safely.
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.
Final Answer:
val action = ScreenADirections.actionScreenAToScreenB(userId)
findNavController().navigate(action) -> Option A
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 unknownstrongwhile earning +1 Grip toward your certificate.