Puedes crear conexiones entre fragmentos con acciones de Navigation. Cuando se invoca una acción de Navigation, el usuario pasa de un destino a otro. En esta guía, se explica qué son las acciones, y se muestra cómo puedes crearlas y usarlas.
Descripción general
Cada acción tiene un ID único y puede contener atributos adicionales, como un destino. El destino define la pantalla a la que la app dirige al usuario cuando inicia la acción. La acción también puede usar argumentos para transportar datos de un destino a otro.
- Safe Args: Con acciones, puedes reemplazar los IDs de recursos por operaciones generadas con Safe Args, lo que proporciona seguridad adicional en el tiempo de compilación.
- Animaciones: También puedes animar las transiciones entre los destinos. Si quieres obtener más información, consulta Cómo animar transiciones entre destinos.
Ejemplos
Define acciones en el archivo en formato XML de tu gráfico de navegación con las etiquetas <action>
. En el siguiente fragmento, se implementa una acción que representa una transición de FragmentA
a FragmentB
.
<fragment
android:id="@+id/fragmentA"
android:name="com.example.FragmentA">
<action
android:id="@+id/action_fragmentA_to_fragmentB"
app:destination="@id/fragmentB" />
</fragment>
Cómo navegar con una acción
Para navegar con esta acción, llama a NavController.navigate()
y pasa el id
de la acción:
navController.navigate(R.id.action_fragmentA_to_fragmentB)
Acciones generales
Puedes usar acciones globales para navegar a un destino desde cualquier lugar.
Para cualquier destino de tu app al que se pueda acceder a través de más de una ruta, define una acción global correspondiente que navegue a ese destino.
Ten en cuenta el siguiente ejemplo. Los destinos results_winner
y game_over
deben aparecer en el destino de inicio. La acción action_pop_out_of_game
brinda la capacidad de hacerlo; action_pop_out_of_game
es una acción global fuera de cualquier fragmento específico.
Es decir, puedes hacer referencia a este y llamarlo desde cualquier lugar dentro de in_game_nav_graph
.
<?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"
android:id="@+id/in_game_nav_graph"
app:startDestination="@id/in_game">
<!-- Action back to destination which launched into this in_game_nav_graph -->
<action android:id="@+id/action_pop_out_of_game"
app:popUpTo="@id/in_game_nav_graph"
app:popUpToInclusive="true" />
<fragment
android:id="@+id/in_game"
android:name="com.example.android.gamemodule.InGame"
android:label="Game">
<action
android:id="@+id/action_in_game_to_resultsWinner"
app:destination="@id/results_winner" />
<action
android:id="@+id/action_in_game_to_gameOver"
app:destination="@id/game_over" />
</fragment>
<fragment
android:id="@+id/results_winner"
android:name="com.example.android.gamemodule.ResultsWinner" />
<fragment
android:id="@+id/game_over"
android:name="com.example.android.gamemodule.GameOver"
android:label="fragment_game_over"
tools:layout="@layout/fragment_game_over" />
</navigation>