val Fragment.rootFragment: Fragment
get() = parentFragment?.rootFragment ?: this
Fragment가 여러 개 쌓여있는 상황일 때 가장 최상단 Fragment를 반환한다.
재귀방식으로 구현해 봤으며, RootFragment 레벨에서 ViewModel 공유가 필요할 때 사용할 수 있다.
class TestFragment: Fragment() {
private val testViewModel: TestViewModel by viewModels(ownerProducer = { rootFragment })
}
fun Fragment.findRootFragment(predicate: (Fragment) -> Boolean): Fragment {
return parentFragment?.let {
if (predicate(it))
it
else
it.findRootFragment(predicate)
} ?: this
}
조건에 맞는 최상단 Fragment를 찾는 Extension도 작성해봤다.
조건에 맞는 Fragment가 없는 경우 RootFragment가 Return 된다.
'Android' 카테고리의 다른 글
[Android] Jetpack Compose Radar Chart (1) | 2024.10.16 |
---|---|
[Android] Compose Scrollable Column에서 처음 보여지는 타이밍 캐치하기 (0) | 2024.07.05 |
[Android] Compose Flow.collectAsState() 파악하기 (0) | 2023.05.14 |
[개발 정보] 코틀린 코루틴 레시피(활용법) (0) | 2023.04.24 |
[Android] Gson을 대체하는 Moshi (0) | 2023.03.10 |