Добрый день!
У меня Android Studio 3.6.3. Создал проект на котлине на основе шаблона Navigation Drawer Activity. В сгенерированный файлах, в content_main.xml есть фрагмент nav_host_fragment, а также в файле mobile_navigation.xml есть такие фрагменты как nav_home, nav_gallery, nav_slideshow. Есть сгенерированные фрагмент классы как HomeFragment, GalleryFragment и т.д. Пункты меню в Navigation Drawer нормально нажимаются, фрагменты меняются в соответствии с меню. Фрагменты наполняю нужной информацией.
Но, проблема в том, что из активити не могу получить доступ к активному фрагменту. supportFragmentManager.fragments возвращает только один фрагмент nav_host_fragment. Этот фрагмент никак не конвертируются через as ни к одному классу фрагментов, таких как HomeFragment, GalleryFragment и т.д. Например, во фрагменте HomeFragment есть кнопка добавления нового элемента в список. Само добавление происходит в функции в активити(реализация интерфейсной функции). После добавление необходимо во фрагменте запустить notifyDataSetChanged(). Или например, нужно прочитать значение переменной во фрагменте из активити
Например, val frag = supportFragmentManager.findFragmentById(R.id.nav_host_fragment) val glr = frag as GalleryFragment - выдает исключение
findFragmentById не находит остальных фрагментов таких как nav_home, nav_gallery, nav_slideshow.
Как получить активный на данный момент фрагмент? Каким образом создаются экземпляры этих фрагментов, как меняются?
Там, кажется, все управляется посредством этих строк:
val navController = findNavController(R.id.nav_host_fragment)
// Passing each menu ID as a set of Ids because each
// menu should be considered as top level destinations.
appBarConfiguration = AppBarConfiguration(setOf(
R.id.nav_home, R.id.nav_gallery, R.id.nav_slideshow), drawerLayout)
setupActionBarWithNavController(navController, appBarConfiguration)
navView.setupWithNavController(navController)