es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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?

Tags:  , , , ,

Answer

  1. Avatar for 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:

    // Constants.kt
    class Constants {
        companion object {
            const val FRAGMENT_TWO_URL = "android-app://example.google.app/fragment_two/{arg}"
        }
    }
    

    Luego, en el archivo XML del gráfico de navegación, podemos referenciar la constante de la siguiente manera:

    // nav_graph.xml
    app:uri="@{Constants.FRAGMENT_TWO_URL}"
    

    En el código Kotlin, podemos usar la constante de la siguiente manera:

    val request = NavDeepLinkRequest.Builder
        .fromUri(Constants.FRAGMENT_TWO_URL.replace("{arg}", valorDelArgumento))
        .build()
    

    Este enfoque garantiza que la URL se defina solo una vez y se pueda actualizar fácilmente en una sola ubicación.

Comments are closed.