FragmentContainerView as NavHostFragment

好久不见. 提交于 2020-04-12 07:50:12

问题


Seems like using the FragmentContainerView doesn't work right out of the box?

<androidx.fragment.app.FragmentContainerView
        class="androidx.navigation.fragment.NavHostFragment"
        android:id="@+id/fragment_nav_host"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:defaultNavHost="true"
        app:navGraph="@navigation/nav_app" />

Here's my code using fragment-ktx:1.2.0-rc01 and I'm just always getting this error:

Caused by: java.lang.IllegalStateException: Activity ...MainActivity@797467d does not have a NavController set on 2131296504

Just using <fragment> works and AFAIK, it's just supposed to be replaced by FragmentContainerView.

Am I missing something or was anyone able to use FragmentContainerView as a NavHostFragment?

Many thanks!


回答1:


Due to this bug-report: https://issuetracker.google.com/issues/142847973

The only way (currently) is to to this:

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

(Java):

NavHostFragment navHostFragment =
    (NavHostFragment) getSupportFragmentManager()
        .findFragmentById(R.id.my_nav_host_fragment);
NavController navController = navHostFragment.getNavController();



回答2:


Call findNavController in postOnCreate instead of onCreate.

Source: https://issuetracker.google.com/issues/142847973




回答3:


using android:name instead of class. works.

<androidx.fragment.app.FragmentContainerView
    android:name="androidx.navigation.fragment.NavHostFragment"
    ...


来源:https://stackoverflow.com/questions/58703451/fragmentcontainerview-as-navhostfragment

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!