Android

[Android] NavigationHostFragment 내의 자식 Fragment 참조하기


간략히 방법만 공유하고자 합니다..

Cannot access class 'android.widget.fragment'. Check your module classpath for missing or conflicting dependencies

대략 아래와 같은 navHostFragment가 존재한다고 합시다.

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <fragment
            android:id="@+id/navHostFragment"
            android:name="androidx.navigation.fragment.NavHostFragment"
            android:tag="navHostFragment"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:defaultNavHost="true"
            app:navGraph="@navigation/xxxxxxxx" />

    </androidx.constraintlayout.widget.ConstraintLayout>

 

이제 이 NavHostFragment 내에 존재하는 fragment 객체를 참조하려합니다.

 

그래서 뷰바인딩을 통해 위의 fragment를 참조하려했을 때, 

binding.navHostFragment

아래와 같은 메시지를 볼 수 있을 것입니다.

 

Cannot access class 'android.widget.fragment'. Check your module classpath for missing or conflicting dependencies.

 

fragment는 뷰가 아니기 때문에, 기존의 뷰를 참조하는 방식으로 참조하거나, tag를 달아 아래처럼 참조가 가능합니다.

// in Fragment
val navHostFragment = childFragmentManager.findFragmentByTag("navHostFragment")

// in Activity
val navHostFragment = supportFragmentManager.findFragmentByTag("navHostFragment")

 

 

자, 그럼 이제 navHostFragment를 참조할 수 있게 되었습니다. 그럼 이제 자식 Fragment들을 얻어야합니다.

 

우선 자식 Fragment가 있는지 부터 확인하기 위해, 아래와 같은 방법을 사용할 수 있습니다

val childSize = navHostFragment?.childFragmentManager?.fragments?.size ?: 0

 

그리고 조건문을 통해 자식 리스트내에 들어가있는 참조하고자 하는 Navigation Child Fragment에 접근할 수 있습니다

if(childSize > 0) {
    val childFragment = navHostFragment?.childFragmentManager?.fragments?.get(0) as? XXXFragment
    childFragment?.xxxxx()
}

 

이상입니다. 도움이 되는 분이 있기를~