Навигация для Android Jetpack, сохраняющая deepLink как константы

#android #xml #navigation #android-jetpack-navigation #android-deep-link

#Android #xml #навигация #android-jetpack-навигация #android-глубокая ссылка

Вопрос:

Документация 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-графе navigation graph?

Ответ №1:

см. Следующее из Format и style

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

а затем используйте его следующим образом:

значение finalURL = context.getString(R.string.url_with_args, «Your_Argument»)

Комментарии:

1. Я вижу, что я недостаточно четко объяснил, я отредактировал свой ответ сейчас. Проблема не столько в коде Kotlin, сколько в графике навигации.