Połączenia między fragmentami możesz tworzyć za pomocą działań nawigacyjnych. Wywołuję działanie nawigacji przenosi użytkownika z jednego miejsca docelowego do drugiego. Ten przewodnik wyjaśnia, czym są działania i jak można je tworzyć oraz wykorzystywać.
Omówienie
Każde działanie ma unikalny identyfikator i może zawierać dodatkowe atrybuty, takie jak miejsce docelowe. Miejsce docelowe określa ekran, na który aplikacja przenosi użytkownika gdy użytkownik aktywuje działanie. W działaniu można też używać argumentów do przenoszenia danych. z jednego miejsca docelowego do drugiego.
- Bezpieczne argumenty: za pomocą działań możesz zastępować identyfikatory zasobów wartością Safe Args Operacje generowane przez argumenty, które zapewniają dodatkowe bezpieczeństwo podczas kompilacji.
- Animacje: możesz też animować przejścia między miejscami docelowymi. Więcej informacji znajdziesz w artykule Animowanie przejścia między miejscami docelowymi.
Przykłady
Zdefiniuj działania w pliku XML grafu nawigacyjnego, korzystając z tagów <action>
.
następujący fragment kodu implementuje działanie reprezentujące przejście z
FragmentA
do FragmentB
.
<fragment
android:id="@+id/fragmentA"
android:name="com.example.FragmentA">
<action
android:id="@+id/action_fragmentA_to_fragmentB"
app:destination="@id/fragmentB" />
</fragment>
Nawigacja za pomocą działania
Aby włączyć nawigację w ramach tego działania, wywołaj NavController.navigate()
i zjedź
oznacza to, że akcja to id
:
navController.navigate(R.id.action_fragmentA_to_fragmentB)
Działania globalne
Możesz użyć działań globalnych, by wyznaczyć trasę do miejsca docelowego z dowolnego miejsca.
W przypadku dowolnego miejsca docelowego w aplikacji, które jest dostępne za pomocą więcej niż 1 ścieżki, zdefiniuj odpowiednie działanie globalne, które do niego dojdzie. miejsce docelowe.
Przyjrzyjmy się temu przykładowi. results_winner
i game_over
oba miejsca docelowe muszą wyświetlać się w miejscu docelowym.
Działanie action_pop_out_of_game
umożliwia takie działanie.
action_pop_out_of_game
to działanie globalne, które odbywa się poza konkretnym fragmentem.
Oznacza to, że możesz się do niej odwołać i zadzwonić do niej w dowolnym miejscu
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>