Как использовать NavController с Uri глубокой ссылки и набором аргументов
Короче говоря, я хотел бы сделать это:
void nav(NavController navController, Uri deepLink, Bundle args) {
navController.navigate(deepLink, args);
}
Однако androidx.navigation.NavController имеет только навигацию(Uri deepLink) и некоторые варианты навигации(int resId, Bundle args) и нет.navigate(Uri deepLink, Bundle args)
функция. Есть ли способ выполнить отправку пакета аргументов при переходе к какому-то неизвестному фрагменту с помощью Uri deepLink?
Например, одна вещь, которая, как я мог видеть, помогла бы, это если бы был способ получить идентификатор ресурса фрагмента, к которому я перехожу, из глубокой ссылки, чтобы я мог затем просто позвонитьnavController.navigate(resID, args)
.
Чтобы представить некоторую информацию, я использую NavController для навигации между фрагментами в одном приложении Activity. Фрагменты разделены на множество разных модулей с множеством разных nav_graphs. DeepLinks создаются программно из некоторых строк в файле конфигурации или отправляются в приложение с нашего сервера и имеют стандартную форму (что-то вроде"{module}://start{name}"
). Некоторым из этих фрагментов теперь необходимо знать некоторые сведения о том, откуда они вызваны, тогда как большинство из них ничего не будет делать с этой информацией. На месте вызова я не знаю, что есть что.
Я ищу относительно изящный способ получить функциональностьnavigate(Uri, Bundle)
. Мне известны возможные уродливые обходные пути, такие как редактирование всех nav_graphs для добавления дополнительных аргументов «safeargs», с которыми большинство модулей/фрагментов ничего не будут делать, а затем всегда вызов"{module}://start{name}/{arg1}/{arg2}"
или поместить пакет аргументов в какое-то глобально доступное место, к которому фрагмент может затем получить доступ в onCreate или что-то в этом роде. Мне бы очень хотелось избежать подобных хаков.
Спасибо за вашу помощь!