#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, сколько в графике навигации.