Чем отличается Navigation.findNavController (it) от NavHostFragment.findNavController ()? - PullRequest
0 голосов
/ 02 мая 2020

Я хочу знать разницу между Navigation.findNavController(it) и NavHostFragment.findNavController(this). В основном оба делают одно и то же, но не знают точное местоположение, которое должны использовать эти методы.

1 Ответ

1 голос
/ 02 мая 2020

Согласно . Перейдите к документации назначения. :

. Чтобы извлечь 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 обратно, поэтому используйте все, что вам удобно.

...