Настройка NavGraph программно
В моем макете деятельности у меня есть следующее NavHostFragment
:
<fragment
android:id="@+id/my_nav_host_fragment"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:name="androidx.navigation.fragment.NavHostFragment"
app:defaultNavHost="true"
app:navGraph="@navigation/my_nav_graph" />
У меня вопрос, как я могу установить NavGraph программно? Как я могу конвертировать my_nav_host_fragment
просмотреть экземпляр в NavHostFragment
пример?
4 ответа
Решение
Я нашел решение:
//Setup the navGraph for this activity
val myNavHostFragment: NavHostFragment = my_nav_host_fragment as NavHostFragment
val inflater = myNavHostFragment.navController.navInflater
val graph = inflater.inflate(R.layout.my_nav_graph)
myNavHostFragment.navController.graph = graph
Основано на: компоненте архитектуры навигации - передача данных аргумента в startDestination
Вы можете написать в своей деятельности следующее.
findNavController(R.id.my_nav_host_fragment).setGraph(R.navigation.my_nav_graph)
Оба ответа вызвали исключение, когда я использовал DynamicNavHostFragment, поэтому я использовал
val navHostFragment: NavHostFragment = supportFragmentManager
.findFragmentById(R.id. my_nav_host_fragment) as NavHostFragment
navHostFragment.findNavController().setGraph(R.navigation. my_nav_graph)
Мое решение таково,
val myNavHostFragment = supportFragmentManager
.findFragmentById(R.id.navHostFragmentMain) as NavHostFragment
val inflater = myNavHostFragment.navController.navInflater
val graph = inflater.inflate(R.navigation.nav_graph)
myNavHostFragment.navController.graph = graph