FragmentContainer Xem dưới dạng NavhostFragment


20

Có vẻ như sử dụng FragmentContainerViewkhông hoạt động ngay lập tức?

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

Đây là mã của tôi đang sử dụng fragment-ktx:1.2.0-rc01và tôi luôn gặp lỗi này:

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

Chỉ cần sử dụng <fragment>các tác phẩm và AFAIK, nó chỉ cần được thay thế bằng FragmentContainerView.

Tôi đang thiếu một cái gì đó hoặc có ai có thể sử dụng FragmentContainerViewnhư một NavHostFragment?

Cảm ơn nhiều!

Câu trả lời:


27

Do báo cáo lỗi này: https://issuetracker.google.com/issues/142847973

Cách duy nhất (hiện tại) là:

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
Chắc chắn tốt hơn chỉ để sử dụng fragmentchứ không phải lo lắng về việc phải nhớ sử dụng cách giải quyết này? Chúng tôi đã thấy sự cố nhưng chỉ đối với một số người dùng, thật kỳ lạ ...
hmac

0

Những gì tôi đã làm là chờ cho đoạn điều hướng tăng cường quan điểm của nó:

    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

sử dụng android:namethay vì class. làm.

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

Tôi gặp lỗi ngay cả khi sử dụngandroid:name
Sam
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.