FragmentContainerView als NavHostFragment

20

Scheint, als würde die Verwendung von FragmentContainerViewnicht sofort funktionieren?

<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" />

Hier ist mein Code, der verwendet wird, fragment-ktx:1.2.0-rc01und ich erhalte immer den folgenden Fehler:

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

Nur mit <fragment>Werken und AFAIK soll es nur durch ersetzt werden FragmentContainerView.

Vermisse ich etwas oder konnte jemand FragmentContainerViewals verwenden NavHostFragment?

Danke vielmals!

Kurt Acosta
quelle

Antworten:

27

Aufgrund dieses Fehlerberichts: https://issuetracker.google.com/issues/142847973

Der einzige Weg (derzeit) ist dazu:

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();
Ove Stoerholt
quelle
2
sicherlich besser nur zu verwenden, fragmentals sich Sorgen zu machen, dass Sie daran denken müssen, diese Problemumgehung zu verwenden? Wir haben Abstürze gesehen, aber nur für einige Benutzer, komisch ...
hmac
0

Ich habe darauf gewartet, dass das Navigationsfragment seine Ansicht aufbläst:

    super.onCreate(savedInstanceState)

    // Set up the form and list.
    setContentView(R.layout.activity_xxx)

    // Set up navigation - action bar and sidebar.
    /// Let the navigation view check/uncheck the menu items.
    nav_view.post { // wait for NavHostFragment to inflate
        val navController = findNavController()
        nav_view.setupWithNavController(navController)
        nav_view.setNavigationItemSelectedListener(this)
    }
Pnemonisch
quelle
-6

mit android:nameanstelle von class. funktioniert.

<androidx.fragment.app.FragmentContainerView
    android:name="androidx.navigation.fragment.NavHostFragment"
    ...
Chihara
quelle
Ich bekomme den Fehler auch bei Verwendungandroid:name
Sam