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: