9

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

Bolt UIX
  • 5,988
  • 6
  • 31
  • 58

3 Answers3

18

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>
Bolt UIX
  • 5,988
  • 6
  • 31
  • 58
  • 2
    Okay, thanks. I am also implementing this. I think for now this is the best solution online – Chidi Aug 23 '20 at 10:06
9

For Java I found the following solution, which permits fragment navigation from an activity

NavController navController = Navigation.findNavController(Activity.this, R.id.nav_host_fragment);
navController.navigateUp();
navController.navigate(R.id.FragmentYouWantShown);

Thanks to Hari Shankar S for help!

Edvin Keskin
  • 133
  • 1
  • 6
0

this worked for me:

val navController = findNavController(R.id.nav_host_fragment)
navController.navigateUp() // to clear previous navigation history
navController.navigate(R.id.logInFragment)
Riccardo
  • 1,083
  • 2
  • 15
  • 25
Maruf Alam
  • 228
  • 4
  • 10