[Android] [Jetpack] Uso básico de la navegación

La navegación se traduce en navegación.

La navegación se refiere a la interacción de diferentes fragmentos de contenido que ayudan a los usuarios a navegar, ingresar y salir de la aplicación. El componente de navegación de Android Jetpack puede ayudarlo a lograr la navegación, ya sea con un simple clic en un botón o patrones más complejos, como la barra de aplicaciones y el cajón de navegación, el componente puede manejarlo. El componente de navegación también asegura una experiencia de usuario consistente y predecible al seguir un conjunto de principios establecidos.

El componente de navegación consta de las siguientes tres partes clave:

  • Mapa de navegación: un recurso XML que contiene toda la información relacionada con la navegación en una ubicación centralizada. Esto incluye todas las áreas de contenido individuales (llamadas destinos) dentro de la aplicación y las posibles rutas a las que los usuarios pueden acceder a través de la aplicación.

  • NavHost: un contenedor en blanco que muestra objetivos en el mapa de navegación. El componente de navegación contiene una implementación de NavHost predeterminada (NavHostFragment) que puede mostrar el objetivo de Fragmento.

  • NavController: gestiona los objetos de navegación de la aplicación en NavHost. Cuando el usuario se mueve por la aplicación, NavController organizará el intercambio de contenido de destino en NavHost.

Al navegar en la aplicación, le dice a NavController que desea navegar a un objetivo específico a lo largo de una ruta específica en el mapa de navegación, o navegar directamente a un objetivo específico. NavController mostrará el destino correspondiente en NavHost.

El componente de navegación proporciona una variedad de otras ventajas, incluidas las siguientes:

  • Procesar transacciones de fragmentos.

  • De forma predeterminada, las operaciones de ida y vuelta se manejan correctamente.

  • Proporcione recursos estandarizados para animaciones y transiciones.

  • Implementar y manejar enlaces profundos.

  • Incluyendo los modos de interfaz de navegación (como el cajón de navegación y la navegación inferior), los usuarios solo necesitan realizar muy poco trabajo adicional.

  • Complemento Safe Args-A Gradle que proporciona seguridad de tipos al navegar entre objetivos y pasar datos.

  • Compatibilidad con ViewModel: puede limitar el alcance de ViewModel a un gráfico de navegación para compartir datos relacionados con la interfaz entre los objetivos del gráfico.

  • Además, también puede utilizar el Editor de navegación de Android Studio para ver y editar el mapa de navegación.

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

Fácil de usar

Introducir navegación

Introducido en build.gradle del módulo que necesita usar Navigation

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

Crea un mapa de navegación

Haga clic derecho en el directorio res-New-Android Resource File

nav-graph.png

En la interfaz emergente, el nombre del archivo se puede ingresar a voluntad, el tipo de recurso es Navegación y haga clic en Aceptar

nav-graph2.png

Después de hacer clic en Aceptar, se creará el directorio de navegación en el directorio res, así como el archivo de navegación que se acaba de definir.

nav-graph3.png

Haga doble clic para abrir el archivo de navegación que acaba de crear. Puede ver que no hay contenido en la interfaz de Diseño. Puede hacer clic en el icono + de arriba para agregar el fragmento, o puede agregarlo manualmente en el xml.

nav-graph4.png

Necesitamos especificar startDestination para este archivo, que es la interfaz de inicio

nav-graph5.png

startDestination se especifica como mainFragment, y el diseño correspondiente de mainFragment es fragment_main

La navegación primero cargará un Fragmento predeterminado, que debe especificarse en Actividad

<?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>

Configure defaultNavHost en verdadero, es decir, especifique este fragmento como el NavHost predeterminado, y cada mapa de navegación solo puede especificar un NavHost predeterminado. Aquí nameconfigurado androidx.navigation.fragment.NavHostFragment, navGraphconfigurado nav_graph, es decir, se designa como mapa nav_graph. De esta manera, cuando se inicia la Actividad, primero cargará el fragmento configurado por startDestination en el diagrama de navegación a través del fragmento en el diseño de la actividad.

navegación

Navega de un Fragmento a otro Fragmento, puedes pasar

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;
    }

Aquí, haga clic en un botón para saltar y Navigation.findNavController(v).navigate()navegar por los métodos. Aquí también puede pasar valores a través de Bundle.

En el Fragmento de destino, los getArguments()datos pasados se pueden obtener a través de

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;
    }

En el Fragmento de destino, también puede volver al Fragmento anterior con un botón:Navigation.findNavController(v).popBackStack()

 

Supongo que te gusta

Origin blog.csdn.net/xfb1989/article/details/110876273
Recomendado
Clasificación