Navegación multimódulo en Android | por Abhriya Roy | junio de 2021
MetroMigre su aplicación a una arquitectura de módulos múltiples con funciones y se pregunte si las dependencias de navegación causarán dependencias circulares.
¡Veamos cómo podemos aliviar todos los problemas y crear una implementación limpia!
Supongamos que ya tenemos los conocimientos básicos de los siguientes aspectos: –
- Componentes de navegación de Android
- Utilice Hilt para la inyección de dependencia
Bueno, ¡comencemos!
La estructura de nuestro proyecto se ve así:
Nuestra aplicación contendrá varios módulos, a saber
- solicitud
- nuclear
- Característica a (característica pronunciada A)
- Característica b (característica pronunciada B)
Módulo de aplicación Es el lugar para todo lo relacionado con las funciones básicas de la aplicación, como MainActivity
con HomeFragment
En Vivo.
Módulo principal Es un módulo universal, que contiene todo el contenido que se puede compartir entre varios módulos, como varios utility
clase.
plancharUna especiemódulo tureA Es el lugar donde se ubica todo lo relacionado con nuestra característica A.
Módulo FeatureB Es el lugar donde se ubica todo lo relacionado con nuestra característica B.
Ahora conocemos un poco los módulos y su contenido en la aplicación.
Al llegar a nuestra pila de navegación, se ve así:
Aplicación → Función A → Función B
con
Aplicación → Función B → Función A
Entonces, aquí vemos que podemos pasar de FeatureA a FeatureB y viceversa sin encontrar ningún error de dependencia circular. Se parece a esto:
- Primero iniciamos sesión en HomeFragment, podemos elegir ir a FeatureA o FeatureB.
- Si hacemos clic en FeatureA, podemos optar por ir a FeatureB.
- Si hacemos clic en FeatureB, podemos optar por ir a FeatureA.
- Haga clic en el botón Atrás y nos llevará de regreso al segmento anterior.
Para lograr esto, definiremos interfaces con métodos para navegar a funciones específicas, y la implementación de estas interfaces estará en cada módulo de función y se proporcionará para la inyección de dependencias usando Hilt.
Así que implementémoslo:
paso 1:
En el módulo principal, definimos una interfaz para cada módulo funcional, a saber
- FeatureScreenARouteContract
- FeatureScreenBRouteContract
FeatureScreenARouteContract se parece a
Aquí, hemos creado un archivo llamado show
Acepta los datos que se van a pasar como uno de los parámetros y un NavController
Capaz de inflar la nueva pantalla.
Del mismo modo, FeatureScreenBRouteContract se ve así
Paso 2:
En el módulo de la función A, proporcionaremos la implementación FeatureScreenARouteContract
Tomando dataToPass
Y entregarlo inflando la pantalla correspondiente.
Lo que querrías saber nav_graph_a
como
Por último, debemos proporcionar nuestro FeatureARouteContractImpl
Use el mango para que podamos usarlo en cualquier lugar de nuestra aplicación. Así es como se hace:
Feaute A ahora se puede usar en cualquier lugar llamando a nuestra aplicación FeatureScreenARouteContract
En cualquier lugar de nuestra aplicación.
También para el módulo featureB, la implementación es la siguiente:
¡Ahora featureB también se puede inyectar en cualquier lugar!
último paso:
Desde llamar a cualquiera de nuestros módulos homeFragment
En el módulo de la aplicación, simplemente podemos inyectar nuestro contrato de enrutamiento y llamar show
Su método
Para abrir featureB desde featureA, podemos hacer
Para abrir featureA desde featureB, podemos hacer