Согласно . Перейдите к документации назначения. :
. Чтобы извлечь NavController для фрагмента, действия или представления , используйте один из следующие методы
Если у вас есть только ссылка на View
, используйте Navigation.findNavController()
. Согласно его Javado c, он идет вверх по иерархии View, чтобы найти NavController
. Это будет уместно в onClick()
слушателях или в других случаях, когда вы взаимодействуете с представлением, которое было создано назначением Fragment
.
Если у вас есть ссылка на Activity
и идентификатор Хост, используйте Navigation.findNavController(Activity, @IdRes int)
. Согласно его Javado c, «это удобная оболочка вокруг Navigation.findNavController(View)
» - он просто звонит findViewById()
для вас.
Когда у вас есть ссылка на Fragment
, вы можете использовать NavHostFragment.findNavController()
. В соответствии с его Javado c, он идет вверх по иерархии Fragment
(то есть, вызывает getParentFragment()
, пока не найдет NavHostFragment
) до , звонящего на Navigation.findNavController(View)
.
Во всех случаях вы получаете один и тот же NavController
обратно, поэтому используйте все, что вам удобно.