web-dev-qa-db-ja.com

View.findNavController()とFragment.findNavController()

どこでもNavHostFragmentできるfindNavController().navigateUp()

または、私のフラグメントにナビゲーションに使用するボタンがある場合は、次のいずれかを実行できます。

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

または

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

Fragmentでボタンクリックリスナーを設定するときに、なぜ一方の拡張関数をもう一方の関数に対して使用するのですか?

7
liminal

それらはほとんど同じです。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);
    }
    ...
}
7
jaychang0917