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!

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();

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)
    }


-6

mit android:nameanstelle von class. funktioniert.

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

Ich bekomme den Fehler auch bei Verwendungandroid:name
Sam
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.