[android] NavHostFragment로 FragmentContainerView

사용 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?

많은 감사합니다!



답변

이 버그 보고서로 인해 :
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();


답변

내가 한 것은 탐색 조각이보기를 부 풀릴 때까지 기다리는 것입니다.

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


답변

전화 findNavController에서 postOnCreate대신 onCreate.

출처 : https://issuetracker.google.com/issues/142847973


답변

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

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


답변