Настройка 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
Другие вопросы по тегам