我想知道Navigation.findNavController(it)
和NavHostFragment.findNavController(this)
之间的区别。基本上,两者都在做同样的事情,但不知道这些方法必须使用的确切位置。
根据导航到目标文档:
要检索片段、活动或视图的NavController,请使用以下方法之一
如果只有对View
的引用,请使用Navigation.findNavController()
。根据它的Javadoc,它向上进入View层次结构以找到NavController
。这适用于onClick()
侦听器或与Fragment
目的地创建的视图交互的其他情况。
如果您有对Activity
和导航主机id的引用,请使用Navigation.findNavController(Activity, @IdRes int)
。根据它的Javadoc,"这是一个围绕Navigation.findNavController(View)
的方便包装器"——它只是为您调用findViewById()
。
如果有对Fragment
的引用,则可以使用NavHostFragment.findNavController()
。根据其Javadoc,在调用Navigation.findNavController(View)
之前,它向上遍历Fragment
层次结构(即,调用getParentFragment()
直到找到NavHostFragment
(。
在所有情况下,您都会得到相同的NavController
,所以请使用任何方便的方法。