[Android] [Jetpack] Grundlegende Verwendung der Navigation

Navigation bedeutet Navigation.

Navigation bezieht sich auf die Interaktion verschiedener Inhaltsfragmente, die Benutzer beim Navigieren, Betreten und Beenden der Anwendung unterstützen. Die Navigationskomponente von Android Jetpack kann Ihnen dabei helfen, eine Navigation zu erreichen, unabhängig davon, ob es sich um einen einfachen Knopfdruck oder um komplexere Muster wie die Anwendungsleiste und die Navigationsleiste handelt. Die Navigationskomponente gewährleistet außerdem eine konsistente und vorhersehbare Benutzererfahrung, indem sie einer Reihe festgelegter Prinzipien folgt.

Die Navigationskomponente besteht aus den folgenden drei Hauptteilen:

  • Navigationskarte: Eine XML-Ressource, die alle navigationsbezogenen Informationen an einem zentralen Ort enthält. Dies umfasst alle einzelnen Inhaltsbereiche (als Ziele bezeichnet) innerhalb der App sowie mögliche Pfade, auf die Benutzer über die App zugreifen können.

  • NavHost: Ein leerer Container, der Ziele in der Navigationskarte anzeigt. Die Navigationskomponente enthält eine Standard-NavHost-Implementierung (NavHostFragment), mit der das Fragmentziel angezeigt werden kann.

  • NavController: Verwalten Sie die Objekte der Anwendungsnavigation in NavHost. Wenn sich der Benutzer durch die Anwendung bewegt, organisiert NavController den Austausch von Zielinhalten in NavHost.

Wenn Sie in der App navigieren, teilen Sie NavController mit, dass Sie entlang eines bestimmten Pfads in der Navigationskarte zu einem bestimmten Ziel navigieren oder direkt zu einem bestimmten Ziel navigieren möchten. NavController zeigt das entsprechende Ziel in NavHost an.

Die Navigationskomponente bietet eine Reihe weiterer Vorteile, darunter die folgenden:

  • Fragmenttransaktionen verarbeiten.

  • Standardmäßig werden Roundtrip-Vorgänge korrekt behandelt.

  • Bereitstellung standardisierter Ressourcen für Animationen und Übergänge.

  • Implementieren und behandeln Sie Deep Links.

  • Inklusive der Navigationsoberflächenmodi (wie Navigationsschublade und untere Navigation) müssen Benutzer nur sehr wenig zusätzliche Arbeit leisten.

  • Sicheres Args-A Gradle-Plugin, das Typensicherheit beim Navigieren zwischen Zielen und Übergeben von Daten bietet.

  • ViewModel-Unterstützung - Sie können den Umfang des ViewModel auf ein Navigationsdiagramm beschränken, um schnittstellenbezogene Daten zwischen den Zielen des Diagramms auszutauschen.

  • Darüber hinaus können Sie den Navigationseditor von Android Studio auch zum Anzeigen und Bearbeiten der Navigationskarte verwenden.

以上内容来自官方文档(我只是一个搬运工\(^o^)/)

Einfach zu benutzen

Navigation einführen

Eingeführt im build.gradle des Moduls, das die Navigation verwenden muss

    def nav_version = "2.3.0-alpha01"
    implementation "androidx.navigation:navigation-fragment:$nav_version"
    implementation "androidx.navigation:navigation-ui:$nav_version"

Erstellen Sie eine Navigationskarte

Klicken Sie mit der rechten Maustaste in das Res-Verzeichnis-New-Android Resource File

nav-graph.png

In der Popup-Oberfläche kann der Dateiname nach Belieben eingegeben werden, der Ressourcentyp ist Navigation und Sie klicken auf OK

nav-graph2.png

Nach dem Klicken auf OK wird das Navigationsverzeichnis im res-Verzeichnis sowie die gerade definierte Navigationsdatei erstellt

nav-graph3.png

Doppelklicken Sie, um die soeben erstellte Navigationsdatei zu öffnen. Sie können sehen, dass die Entwurfsoberfläche keinen Inhalt enthält. Sie können auf das Symbol + oben klicken, um das Fragment hinzuzufügen, oder Sie können es manuell in die XML-Datei einfügen.

nav-graph4.png

Wir müssen startDestination für diese Datei angeben, die die Startschnittstelle ist

nav-graph5.png

startDestination wird als mainFragment angegeben, und das entsprechende Layout von mainFragment lautet fragment_main

Die Navigation lädt zuerst ein Standardfragment, das in Aktivität angegeben werden muss

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <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/nav_graph" />

</LinearLayout>

Konfigurieren Sie defaultNavHost auf true, dh geben Sie dieses Fragment als Standard-NavHost an, und jede Navigationskarte kann nur einen Standard-NavHost angeben. Hier namekonfiguriert androidx.navigation.fragment.NavHostFragment, navGraphkonfiguriert nav_graph, d. H. Als nav_graph-Karte bezeichnet. Auf diese Weise wird beim Start der Aktivität zuerst das durch startDestination im Navigationsdiagramm konfigurierte Fragment durch das Fragment im Aktivitätslayout geladen.

Navigation

Navigieren Sie durch ein Fragment zu einem anderen Fragment, das Sie übergeben können

public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_main, container, false);
        loginBtn = view.findViewById(R.id.fragment_main_login);
        loginBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Bundle bundle = new Bundle();
                bundle.putString("name", "zs");
                Navigation.findNavController(v).navigate(R.id.action_mainFragment_to_loginFragment, bundle);
            }
        });
        return view;
    }

Klicken Sie hier auf eine Schaltfläche, um zu springen und durch die Navigation.findNavController(v).navigate()Methoden zu navigieren. Hier können Sie auch Werte über Bundle übergeben.

Im Zielfragment können die getArguments()übergebenen Daten durch abgerufen werden

public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        String name = getArguments().getString("name", "null");
        Toast.makeText(getContext(), name, Toast.LENGTH_SHORT).show();
        View view = inflater.inflate(R.layout.fragment_login, container, false);
        backBtn = view.findViewById(R.id.fragment_login_back);
        backBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Navigation.findNavController(v).popBackStack();
            }
        });
        return view;
    }

Im Zielfragment können Sie auch mit einer Schaltfläche zum vorherigen Fragment zurückkehren:Navigation.findNavController(v).popBackStack()

 

Ich denke du magst

Origin blog.csdn.net/xfb1989/article/details/110876273
Empfohlen
Rangfolge