В моем приложении я использую одно действие с архитектурой с несколькими фрагментами и перемещаюсь между ними с помощью библиотеки навигации. В одном из фрагментов у меня есть несколько категорий, каждая из которых связана с идентификатором. Когда щелкают по категории, я перехожу на экран соответствующего объяснения категории с кодом ниже.
val directions = MainNavGraphDirections.launchFragmentWithThisCategoryId(categoryId!!)
onRoute(AppRoute.Directions(directions))
Приведенный выше код отправляет их на экран объяснения, связанный со связанным categoryId
. До этого момента все хорошо, запускается правильный экран объяснения на основе categoryId
. На этом экране объяснения у меня есть глубокая ссылка с тегом chatbot://fragment/wizardintro
, который должен дать основному действию знать конкретный последующий фрагмент c для отправки пользователю. Я обозначаю все фрагменты, которые могут получить эту глубокую ссылку, с помощью кода ниже.
companion object{
const val DEEP_LINK = "chatbot://fragment/wizardintro"
}
В MainActivity у меня есть метод, который получает все различные намерения глубоких ссылок и сопоставляет их с тегами, которые будут запустите соответствующий фрагмент категории с кодом ниже.
override fun onNewIntent(intent: Intent?) {
super.onNewIntent(intent)
intent?.data?.toString().also { deepLink ->
when (deepLink) {
IntroductionFragment.DEEP_LINK ->{
val categoryId = intent?.getLongExtra("categoryId", 0L)
val directions = MainNavGraphDirections.actionGlobalGoalWizard(categoryId)
navController.popBackStack()
navController.navigate(directions)
}
}
Теперь моя проблема возникает, когда я пытаюсь найти этот categoryId
в Основном действии и передать его следующему фрагменту. Я ничего не получаю, и только Лонг передается по умолчанию. Я думаю, что функция переопределить удовольствие onNewIntent (намерение: намерение?) {} В MainActivity получить любое намерение. Чтобы было ясно, эти намерения отправляются из фрагмента объяснения, который технически является фрагментом, который загружает json. В json есть «route»: {«type»: «route», «url»: «chatbot: /// фрагмент / wizardintro»
В MainActivity функции onNewIntent получают эти намерения распаковывает их с этой строкой intent?.data?.toString().also ...
, затем в операторе when выбирает фрагмент, который имеет соответствующий chatbot:///fragment/wizardintro
Я сказал все это, чтобы сказать, что основное действие на самом деле не получает categoryId, это просто выбирает запуск необходимого фрагмента, фактически не имея ничего связанного с categoryId
. Это заставляет меня думать, что первый нажатый элемент CategoryId фактически не передается в MainActivity. Хотя мне кажется, что не должно быть так сложно передавать объекты / данные из фрагмента в действие. Что мне не хватает? Что я могу прочитать, чтобы узнать больше об этом? Спасибо за ваше время и ответы!