NavHostFragment로 FragmentContainerView


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합니다.

나는 뭔가를 놓치고 또는 수있는 사람이 사용 된 FragmentContainerViewA와 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)
    }


-6

android:name대신에 사용 합니다 class. 공장.

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

사용할 때 심지어 오류android:name
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.