Navigation.findNavController(it)和NavHostFragment.findNavCont



我想知道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,所以请使用任何方便的方法。

最新更新