Post Information
Category: Extension
Updated: 6/15/2024
Author: Ă–mer Sungur
Reading time: 1 Min
View Binding Delegate Extension
Published: 6/15/2024
inline fun AppCompatActivity.viewBinding(
crossinline factory: (LayoutInflater) -> T
) = lazy(LazyThreadSafetyMode.NONE) {
factory(layoutInflater)
}
fun Fragment.viewBinding(factory: (View) -> T): ReadOnlyProperty =
object : ReadOnlyProperty, DefaultLifecycleObserver {
private var binding: T? = null
override fun getValue(thisRef: Fragment, property: KProperty<*>): T =
binding ?: factory(requireView()).also {
if (viewLifecycleOwner.lifecycle.currentState.isAtLeast(Lifecycle.State.INITIALIZED)) {
viewLifecycleOwner.lifecycle.addObserver(this)
binding = it
}
}
override fun onDestroy(owner: LifecycleOwner) {
binding = null
}
}
Share Article: