親の Fragment は requireParentFragment で取れるけれど最も祖先のを取る、requireRootFragment みたいなのって無いんだっけ?
— バトルプログラマー柴田智也🔄🍣 (@tomoya_shibata) 2023年12月13日
サッとドキュメントを見ていたところ多分なかったので requireParentFragment
の実装を参考に自前で用意した。
/** * このフラグメントを含むルートフラグメントを返します。 * [Fragment.requireParentFragment] を参考にした実装です。 */ fun Fragment.requireRootFragment(): Fragment { fun findRootFragment(fragment: Fragment): Fragment { val parentFragment = fragment.parentFragment ?: return fragment return findRootFragment(parentFragment) } val parentFragment = parentFragment ?: if (context == null) { throw IllegalStateException("Fragment $this is not attached to any Fragment or host") } else { throw IllegalStateException("Fragment $this is not a child Fragment, it is directly attached to ${requireContext()}") } return findRootFragment(parentFragment) }