问题
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?
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
回答1:
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>
来源:https://stackoverflow.com/questions/63007726/navigation-component-how-to-navigate-from-activity-to-a-fragment