Как использовать 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 или что-то в этом роде. Мне бы очень хотелось избежать подобных хаков.

Спасибо за вашу помощь!

0 ответов

Другие вопросы по тегам