Suas ideias em realidade digital!
Navigation Component é a biblioteca oficial do Android Jetpack para gerenciar navegação entre Fragments. Ela resolve problemas clássicos como:
implementation "androidx.navigation:navigation-fragment-ktx:2.7.7"
implementation "androidx.navigation:navigation-ui-ktx:2.7.7"
Se usar Safe Args:
plugins {
id "androidx.navigation.safeargs.kotlin"
}
Crie em: res/navigation/nav_graph.xml
<navigation
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/nav_graph"
app:startDestination="@id/homeFragment">
<fragment
android:id="@+id/homeFragment"
android:name="com.example.HomeFragment"
android:label="Home">
<action
android:id="@+id/action_home_to_detail"
app:destination="@id/detailFragment"/>
</fragment>
<fragment
android:id="@+id/detailFragment"
android:name="com.example.DetailFragment"
android:label="Detail"/>
</navigation>
<androidx.fragment.app.FragmentContainerView
android:id="@+id/nav_host"
android:name="androidx.navigation.fragment.NavHostFragment"
app:navGraph="@navigation/nav_graph"
app:defaultNavHost="true"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
findNavController()
.navigate(R.id.action_home_to_detail)
Muito mais simples que FragmentTransaction manual.
<fragment
android:id="@+id/detailFragment"
android:name="com.example.DetailFragment">
<argument
android:name="userId"
app:argType="integer"/>
</fragment>
Navegação:
val action = HomeFragmentDirections
.actionHomeToDetail(userId = 10)
findNavController().navigate(action)
Recebendo no DetailFragment:
val args: DetailFragmentArgs by navArgs()
val id = args.userId
Safe Args evita erros de tipo.
findNavController().navigate(
R.id.homeFragment,
null,
NavOptions.Builder()
.setPopUpTo(R.id.loginFragment, true)
.build()
)
Muito usado após login.