Skip to content

Instantly share code, notes, and snippets.

@NikolaDespotoski
Created May 2, 2020 14:21
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save NikolaDespotoski/11c51a58d7704732a0624c190ef7f370 to your computer and use it in GitHub Desktop.
Save NikolaDespotoski/11c51a58d7704732a0624c190ef7f370 to your computer and use it in GitHub Desktop.
suspend fun <F : Fragment> FragmentManager.awaitFragmentById(idRes: Int) =
suspendCancellableCoroutine<F> {
val backStackListener = object : FragmentManager.OnBackStackChangedListener {
override fun onBackStackChanged() {
val f = findFragmentById(idRes) as F?
if (f != null) {
removeOnBackStackChangedListener(this)
it.resume(f)
}
}
}
addOnBackStackChangedListener(backStackListener)
it.invokeOnCancellation { removeOnBackStackChangedListener(backStackListener) }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment