Search code examples
androidandroid-jetpackandroid-architecture-navigationandroid-navigation

Navigation Component: how to navigate from activity to a fragment


I want to navigate on click FAB in (activity) to New fragment 1.

in my code fab button in the main activity common for all pages. could anyone guide me?enter image description here

activity.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

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

    <com.google.android.material.bottomappbar.BottomAppBar
        android:id="@+id/bottomAppBar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom"
        app:navigationIcon="@drawable/ic_baseline_dashboard_24"
        app:navigationContentDescription="Navigation icon"
        />
    <com.google.android.material.floatingactionbutton.FloatingActionButton
        android:id="@+id/floatingActionButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_anchor="@id/bottomAppBar"
        android:backgroundTint="@color/colorPrimary"
        style="@style/Widget.App.FloatingActionButton"
        app:srcCompat="@drawable/menu_bug" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>

graph.xml

<?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"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/mobile_navigation"
    app:startDestination="@+id/navigation_home">

    <fragment
        android:id="@+id/navigation_home"
        android:name="com.androidfeby.bugreport.ui.home.HomeFragment"
        android:label="@string/title_home"
        tools:layout="@layout/fragment_home" />

    <fragment
        android:id="@+id/navigation_report"
        android:name="com.androidfeby.bugreport.ui.report.FragmentReport"
        android:label="@string/title_dashboard"
        tools:layout="@layout/fragment_report" />

    <fragment
        android:id="@+id/navigation_notifications"
        android:name="com.androidfeby.bugreport.ui.history.NotificationsFragment"
        android:label="@string/title_notifications"
        tools:layout="@layout/fragment_notifications" />
</navigation>

requirement: if I click on fab button just navigate to fragment "navigation_report" which is in the graph


Solution

  • MainActivity : XML navigate to a new fragment, when on click fab button

    <?xml version="1.0" encoding="utf-8"?>
    <androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">
    
        <fragment
            android:id="@+id/nav_host_fragment"
            android:name="androidx.navigation.fragment.NavHostFragment"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:defaultNavHost="true"
            app:navGraph="@navigation/mobile_navigation" />
    
        <com.google.android.material.bottomappbar.BottomAppBar
            android:id="@+id/bottomAppBar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom"
            app:navigationIcon="@drawable/ic_dashboard_svgrepo_com"
            app:navigationContentDescription="Navigation icon"
            />
        <com.google.android.material.floatingactionbutton.FloatingActionButton
            android:id="@+id/floatingActionButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            app:layout_anchor="@id/bottomAppBar"
            android:backgroundTint="@color/colorPrimary"
            style="@style/Widget.App.FloatingActionButton"
            app:srcCompat="@drawable/menu_bug" />
    
    </androidx.coordinatorlayout.widget.CoordinatorLayout>
    

    MainActivity : KT

        val navController = findNavController(R.id.nav_host_fragment)
    // MainActivity : onCreate
    // in my code fab button in the main activity common for all fragment. 
            floatingActionButton.setOnClickListener {
                navController.navigateUp() // to clear previous navigation history
                navController.navigate(R.id.new_issue)
            }
    

    // plz suggest me any better solution on this.

    mobile_navigation.XML:

    <?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"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/mobile_navigation"
        app:startDestination="@+id/home">
    
        <fragment
            android:id="@+id/home"
            android:name="com.androidfeby.bugreport.FragmentHome"
            android:label="@string/title_home"
            tools:layout="@layout/fragment_home" >
        </fragment>
    
        <fragment
            android:id="@+id/new_issue"
            android:name="com.androidfeby.bugreport.FragmentNewIssue"
            android:label="@string/title_dashboard"
            tools:layout="@layout/fragment_report" />
    
        <fragment
            android:id="@+id/history"
            android:name="com.androidfeby.bugreport.FragmentHistory"
            android:label="@string/title_notifications"
            tools:layout="@layout/fragment_notifications" />
    </navigation>