【问题标题】:Android Jetpack Navigation storing deepLink as constantsAndroid Jetpack Navigation 将 deepLink 存储为常量
【发布时间】:2021-12-06 08:47:14
【问题描述】:

Android 文档建议使用深层链接进行模块间导航。 https://developer.android.com/guide/navigation/navigation-multi-module#across

请注意以下内容的深层链接:

app:uri="android-app://example.google.app/fragment_two"

然后在代码中引用相同的 url:

val request = NavDeepLinkRequest.Builder
    .fromUri("android-app://example.google.app/fragment_two".toUri())
    .build()

示例很清楚,但它使用硬编码字符串,最好将其存储在一个位置。我可以使用字符串资源,如下所示:

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

// Kotlin code
val request = NavDeepLinkRequest.Builder
    .fromUri(context.getString(R.string.fragment_two_url))
    .build()

但是,如果深层链接有参数,这将不起作用,如下所示:

app:uri="android-app://example.google.app/fragment_two/{arg}"

我们不能像上面那样插入字符串资源。

// This won't work
app:uri="@string/fragment_two_url/{arg}"

有没有办法创建一个可以在 Kotlin 代码和导航图 XML 中轻松引用的常量?

【问题讨论】:

    标签: android xml navigation android-jetpack-navigation android-deep-link


    【解决方案1】:

    请参阅Format and style的以下内容

    <string name="url_with_args">android-app://example.google.app/fragment_two/%s</string>
    

    然后像这样使用它:

    val finalUrl = context.getString(R.string.url_with_args, "Your_Argument")

    【讨论】:

    • 我发现我说得不够清楚,我现在编辑了我的答案。问题不在于 Kotlin 代码,而在于导航图。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-20
    • 1970-01-01
    • 2021-12-02
    • 2022-01-06
    • 2019-04-19
    相关资源
    最近更新 更多