간략히 방법만 공유하고자 합니다..
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()
}
이상입니다. 도움이 되는 분이 있기를~
'Android' 카테고리의 다른 글
[Android] ChildFragmentManager vs SupportFragmentManager (1) | 2021.02.19 |
---|---|
[Android] java.lang.IllegalArgumentException: Service not registered: com.google.android.gms.measurement.internal.zzja (0) | 2021.02.19 |
[Android] 안드로이드 투명도 일람 (0) | 2020.11.30 |
[Android] Google Play Console 앱 배포 시 업로드 오류 - apk 파일을 업로드 할 수 없습니다 해결 방법 (0) | 2020.11.02 |
제로메모 - 간편한 메모, 할 일 관리 앱이 출시되었습니다. (0) | 2020.10.22 |