본문 바로가기

Android

[Android] Fragment.rootFragment extension property

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 된다.