Create a lifecycle owner for a view without any boiler plate
import android.view.View
import android.view.View.OnAttachStateChangeListener
import androidx.lifecycle.LifecycleOwner
/** @author Aidan Follestad (@afollestad) */
class ViewLifecycleOwner(view: View) : LifecycleOwner, OnAttachStateChangeListener {
private val lifecycle = SimpleLifecycle(this)
init {
view.addOnAttachStateChangeListener(this)
}
override fun getLifecycle() = lifecycle
override fun onViewAttachedToWindow(v: View?) = lifecycle.onCreate()
override fun onViewDetachedFromWindow(v: View) = lifecycle.onDestroy()
}
fun View.lifecycleOwner(): LifecycleOwner {
val tagOwner = getTag(R.id.view_lifecycle_registry) as? ViewLifecycleOwner
return if (tagOwner != null) {
tagOwner
} else {
val newOwner = ViewLifecycleOwner(this)
setTag(R.id.view_lifecycle_registry, newOwner)
newOwner
}
}
<?xml version="1.0" encoding="utf-8"?>
<resources>
<item format="integer" name="view_lifecycle_registry" type="id"/>
</resources>