Я не понимаю, как мы получаем NavController внутри Activitiy

#android #android-fragments #android-activity #android-navigation #android-jetpack-navigation

#Android #android-фрагменты #android-активность #android-навигация #android-jetpack-навигация

Вопрос:

Я много искал, и большинство людей использовали эту строку кода для запуска NavController в Activity:

 val navHostFragment = supportFragmentManager
        .findFragmentById(R.id.fragmentContainerView_mainActivity)
                as NavHostFragment
navController = navHostFragment.navController
 

Мне интересно, почему мы не можем просто использовать findViewById метод Activity для получения FragmentContainerView.

Ответ №1:

Если то, что вы ищете FragmentContainerView , вы, безусловно, можете использовать findViewById , но если вы хотите получить доступ NavController , вам нужно использовать методы, предоставляемые библиотекой.

 // from fragments
Fragment.findNavController()
// from views
View.findNavController()
// from activity
Activity.findNavController(viewId: Int)
// from NavHostFragment
navHostFragment.navController
 

Комментарии:

1. итак, можем ли мы использовать Activity.findNavController(R.id.fragmentContainerView) для получения NavController?

2. Да, я не тестировал FragmentContainerView, но я думаю, что вы должны иметь доступ к NavController из корневого представления, а также к любым вложенным представлениям в иерархии представлений