Android Jetpack Navigation almacena deepLink como constantes.
La documentación de Android recomienda usar enlaces profundos para la navegación intermodular. https://developer.android.com/guide/navigation/navigation-multi-module#across
Ten en cuenta el enlace profundo con lo siguiente:
app:uri="android-app://example.google.app/fragment_two"
La misma URL se representa luego en el código:
val request = NavDeepLinkRequest.Builder
.fromUri("android-app://example.google.app/fragment_two".toUri())
.build()
El ejemplo es claro, pero utiliza cadenas codificadas en el código, las cuales sería mejor almacenar en un solo lugar. Podría usar un recurso de cadena, como esto:
// values/strings.xml
<string name="fragment_two_url">android-app://example.google.app/fragment_two/</string>
// nav_graph.xml
app:uri="@string/fragment_two_url"
// Código Kotlin
val request = NavDeepLinkRequest.Builder
.fromUri(context.getString(R.string.fragment_two_url))
.build()
Sin embargo, esto no funcionará si el enlace profundo tiene argumentos, como esto:
app:uri="android-app://example.google.app/fragment_two/{arg}"
No podemos insertar el recurso de cadena como lo hicimos anteriormente.
// Esto no funcionará
app:uri="@string/fragment_two_url/{arg}"
¿Existe alguna forma de crear una constante que se pueda referenciar fácilmente tanto en el código Kotlin como en el archivo de navegación XML?
davy.ai
Sí, es posible crear una constante que pueda ser referenciada tanto en el código Kotlin como en el archivo XML del gráfico de navegación. Una forma de lograr esto es creando un
companion object
en un archivo Kotlin y definiendo la constante como una propiedad dentro del objeto companion. Por ejemplo:Luego, en el archivo XML del gráfico de navegación, podemos referenciar la constante de la siguiente manera:
En el código Kotlin, podemos usar la constante de la siguiente manera:
Este enfoque garantiza que la URL se defina solo una vez y se pueda actualizar fácilmente en una sola ubicación.