FragmentContainerView NavHostFragment के रूप में


20

ऐसा लगता FragmentContainerViewहै कि बॉक्स के ठीक बाहर काम नहीं करता है?

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

यहां मेरे कोड का उपयोग किया गया है fragment-ktx:1.2.0-rc01और मुझे हमेशा यह त्रुटि मिल रही है:

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

बस <fragment>काम करता है और AFAIK का उपयोग कर , इसे बस द्वारा प्रतिस्थापित किया जाना चाहिए FragmentContainerView

क्या मुझे कुछ याद आ रहा है या कोई FragmentContainerViewएक के रूप में उपयोग करने में सक्षम था NavHostFragment?

बहुत धन्यवाद!

जवाबों:


27

इस बग-रिपोर्ट के कारण: https://issuetracker.google.com/issues/142847973

इसका एकमात्र तरीका (वर्तमान में) यह है:

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

(जावा):

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

2
fragmentइस समाधान का उपयोग करने के लिए याद रखने के बारे में चिंता करने के बजाय केवल निश्चित रूप से उपयोग करना बेहतर है ? हम क्रैश देख रहे थे लेकिन केवल कुछ उपयोगकर्ताओं के लिए, अजीब ...
hmac

0

मैंने इसके दृश्य को बढ़ाने के लिए नेविगेशन के टुकड़े का इंतजार किया था:

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

-1

कॉल findNavControllerमें postOnCreateके बजायonCreate

स्रोत: https://issuetracker.google.com/issues/142847973


9
: इस मुद्दे पर गूगल के कर्मचारियों में से एक विशेष रूप से यह इस तरह से जिस तरह से करने के लिए नहीं कहा issuetracker.google.com/issues/142847973#comment4
सैम

-6

के android:nameबजाय का उपयोग कर class। काम करता है।

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

उपयोग करते समय भी मुझे त्रुटि मिलती हैandroid:name
सैम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.