> For the complete documentation index, see [llms.txt](https://jobinjj.gitbook.io/tutorials/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://jobinjj.gitbook.io/tutorials/android-jetpack/app-navigation.md).

# App navigation

### Adding navigation library to project

Add following code to project level **build.gradle** file

```

classpath "android.arch.navigation:navigation-safe-args-gradle-plugin:1.0.0-alpha05"
```

Project-level **build.gradle**

```
//on top of file
apply plugin: 'androidx.navigation.safeargs'

implementation "android.arch.navigation:navigation-fragment-ktx:1.0.0"
implementation "android.arch.navigation:navigation-ui-ktx:1.0.0"
```

In the layout of main activity or home activity add following

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

**MainActivity.java**

```
onCreate(){
initialize nav controller
val navController = this.findNavController(R.id.myNavHostFragment)
NavigationUI.setupActionBarWithNavController(this,navController)
}

// enable upbutton
override fun onSupportNavigateUp(): Boolean {
        val navController = this.findNavController(R.id.myNavHostFragment)
        return navController.navigateUp()
    }
```

now create a **navigation.xml** under resources folder. Open design and add your first fragment as destination. While creating fragments make sure to uncheck create layout file, include fragment factory methods, include interface callbacks.

Code to navigate using onClickListener

```
view?.findNavController()?.navigate(SubcategoryFragmentDirections.actionSubcategoryFragmentToSubCategoryDetailFragment())
```

get arguments

```
CurrentFragmentArgs args = CurrentFragmentArgs .fromBundle(getArguments)
```
