Skip to content

Instantly share code, notes, and snippets.

@GiorgioNatili
Created April 21, 2018 16:28
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save GiorgioNatili/b647bccea930d27dbf93e6c01c176119 to your computer and use it in GitHub Desktop.
Save GiorgioNatili/b647bccea930d27dbf93e6c01c176119 to your computer and use it in GitHub Desktop.
Wait until a fragment is created and execute a lambda with the fragment as an argument.
import android.arch.lifecycle.Lifecycle
import android.arch.lifecycle.LifecycleObserver
import android.arch.lifecycle.LifecycleOwner
import android.arch.lifecycle.OnLifecycleEvent
import android.support.v4.app.Fragment
inline fun <reified T : Fragment>Fragment.waitUntilCreated(crossinline callback: (T) -> Unit) {
val activationObject: LifecycleOwner = this
object : LifecycleObserver {
init {
activationObject.lifecycle.addObserver(this)
}
@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
fun onCreate() {
check(activationObject is T) {
"The activation object and the generic type differs."
}
callback(activationObject as T)
}
}
}
@GiorgioNatili
Copy link
Author

Sample usage

fragment.waitUntilCreated<DecksFragment> { 
    println("Do whatever you want with ${it}")
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment