web-dev-qa-db-fra.com

View.findNavController () vs Fragment.findNavController ()

N'importe où dans un NavHostFragment je peux faire findNavController().navigateUp()

Ou, si dans mon fragment j'ai un bouton à utiliser pour la navigation, je pourrais faire soit:

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

ou

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

Pourquoi devrais-je utiliser une fonction d'extension par rapport à l'autre lors de la configuration d'un écouteur de clic de bouton dans un fragment?

7
liminal

Ils sont presque les mêmes, Fragment.findNavController() n'est qu'un raccourci pratique, il appelle en fait Navigation.findNavController(view) à la fin. Les deux obtiennent le NavController de la vue racine du fragment.

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