我可以在NavHostFragment中的任何地方执行findNavController().navigateUp()

或者,如果在“片段”中有一个用于导航的按钮,则可以执行以下任一操作:

editButton.setOnClickListener { v ->
    v.findNavController().navigateUp()
}


要么

editButton.setOnClickListener {
    findNavController().navigateUp()
}


在Fragment中设置按钮单击侦听器时,为什么要使用一个扩展功能而不使用另一个扩展功能?

最佳答案

它们几乎相同,Fragment.findNavController()只是一个方便的快捷方式,它实际上在最后调用Navigation.findNavController(view)。他们两个都从片段的根视图获取NavController



// NavHostFragment.java
public static NavController findNavController(@NonNull Fragment fragment) {
    ....
    View view = fragment.getView();
    if (view != null) {
        return Navigation.findNavController(view);
    }
    ...
}

10-07 12:44