Introduction to Android Jetpack Navigation Component


The Android Jetpack Navigation Component simplifies app navigation, providing tools to define navigation paths and handle transitions. It manages the back stack and argument passing seamlessly, making it easier to build and maintain navigation in Android apps.

1. What is the Navigation Component?

The Navigation Component is a Jetpack library that consists of three main parts:

  • Navigation Graph: A resource file that defines destinations and actions.
  • NavHost: A container that displays destinations defined in the navigation graph.
  • NavController: An object used to programmatically navigate between destinations.

2. Setting Up the Navigation Component

Step 1: Add Dependencies

    dependencies {
        implementation "androidx.navigation:navigation-fragment-ktx:2.7.0"
        implementation "androidx.navigation:navigation-ui-ktx:2.7.0"
    }
        

Step 2: Create a Navigation Graph

Create a res/navigation/nav_graph.xml file to define navigation paths.

    <?xml version="1.0" encoding="utf-8"?>
    <navigation xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        app:startDestination="@id/homeFragment">

        <fragment
            android:id="@+id/homeFragment"
            android:name="com.example.app.HomeFragment"
            android:label="Home">
            <action
                android:id="@+id/action_home_to_details"
                app:destination="@id/detailsFragment" />
        </fragment>

        <fragment
            android:id="@+id/detailsFragment"
            android:name="com.example.app.DetailsFragment"
            android:label="Details" />
    </navigation>
        

Step 3: Add NavHost to Layout

Add a NavHostFragment to your activity's layout file.

    <androidx.fragment.app.FragmentContainerView
        android:id="@+id/nav_host_fragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:navGraph="@navigation/nav_graph"
        app:defaultNavHost="true"
        android:name="androidx.navigation.fragment.NavHostFragment" />
        

3. Navigating Between Destinations

Use the NavController to navigate between destinations.

Example: Navigate with Button Click

    class HomeFragment : Fragment() {
        override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
            super.onViewCreated(view, savedInstanceState)
            view.findViewById

Example: Passing Arguments

Modify the navigation graph to define arguments.

    <fragment
        android:id="@+id/detailsFragment"
        android:name="com.example.app.DetailsFragment"
        android:label="Details">
        <argument
            android:name="itemId"
            app:argType="string" />
    </fragment>
        

Pass and retrieve arguments in Kotlin:

    // Passing arguments
    findNavController().navigate(R.id.action_home_to_details, bundleOf("itemId" to "123"))

    // Receiving arguments
    class DetailsFragment : Fragment() {
        override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
            super.onViewCreated(view, savedInstanceState)
            val itemId = arguments?.getString("itemId")
            println("Received itemId: $itemId")
        }
    }
        

4. Handling the Back Stack

The Navigation Component automatically manages the back stack. To customize behavior:

    // Navigate with pop behavior
    findNavController().navigate(
        R.id.action_home_to_details,
        null,
        NavOptions.Builder().setPopUpTo(R.id.homeFragment, true).build()
    )
        

5. Integrating Navigation UI

Integrate the Navigation Component with UI elements like the BottomNavigationView or Toolbar.

    // BottomNavigationView setup
    val navController = findNavController(R.id.nav_host_fragment)
    findViewById(R.id.bottomNavigationView)
        .setupWithNavController(navController)

    // Toolbar setup
    val appBarConfiguration = AppBarConfiguration(navController.graph)
    findViewById(R.id.toolbar).setupWithNavController(navController, appBarConfiguration)
        

Conclusion

The Android Jetpack Navigation Component simplifies managing app navigation by providing a clear structure, argument passing, and automatic back stack handling. By integrating it into your app, you can create a scalable and maintainable navigation system with minimal boilerplate code.





Advertisement