From 98a421f296322113593d8a3a2b916c83d8ac8010 Mon Sep 17 00:00:00 2001 From: Dylanc Date: Mon, 29 Mar 2021 10:34:32 +0800 Subject: [PATCH] Optimize code --- .../nonreflection/BindingViewHolder.kt | 2 +- .../viewbinding/nonreflection/ViewBinding.kt | 13 ++++++------- .../com/dylanc/viewbinding/BindingViewHolder.kt | 2 +- .../java/com/dylanc/viewbinding/ViewBinding.kt | 15 +++++++-------- 4 files changed, 15 insertions(+), 17 deletions(-) diff --git a/viewbinding-nonreflection/src/main/java/com/dylanc/viewbinding/nonreflection/BindingViewHolder.kt b/viewbinding-nonreflection/src/main/java/com/dylanc/viewbinding/nonreflection/BindingViewHolder.kt index 8b4a635..cf5e3e0 100644 --- a/viewbinding-nonreflection/src/main/java/com/dylanc/viewbinding/nonreflection/BindingViewHolder.kt +++ b/viewbinding-nonreflection/src/main/java/com/dylanc/viewbinding/nonreflection/BindingViewHolder.kt @@ -27,7 +27,7 @@ import androidx.viewbinding.ViewBinding * @author Dylan Cai */ -class BindingViewHolder(val binding: VB) : RecyclerView.ViewHolder(binding.root) { +open class BindingViewHolder(val binding: VB) : RecyclerView.ViewHolder(binding.root) { constructor(block: (LayoutInflater, ViewGroup, Boolean) -> VB, parent: ViewGroup) : this(block(LayoutInflater.from(parent.context), parent, false)) diff --git a/viewbinding-nonreflection/src/main/java/com/dylanc/viewbinding/nonreflection/ViewBinding.kt b/viewbinding-nonreflection/src/main/java/com/dylanc/viewbinding/nonreflection/ViewBinding.kt index 48669c5..196dd1a 100644 --- a/viewbinding-nonreflection/src/main/java/com/dylanc/viewbinding/nonreflection/ViewBinding.kt +++ b/viewbinding-nonreflection/src/main/java/com/dylanc/viewbinding/nonreflection/ViewBinding.kt @@ -65,24 +65,23 @@ class FragmentBindingDelegate( private val bind: (View) -> VB ) : ReadOnlyProperty { - private var lifecycleObserver: LifecycleObserver? = null + private var observedLifecycle = false private var binding: VB? = null @Suppress("UNCHECKED_CAST") override fun getValue(thisRef: Fragment, property: KProperty<*>): VB { - if (lifecycleObserver == null) { - lifecycleObserver = object : LifecycleObserver { + if (!observedLifecycle) { + thisRef.viewLifecycleOwner.lifecycle.addObserver(object : LifecycleObserver { @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY) fun onDestroyView() { binding = null } - }.also { - thisRef.viewLifecycleOwner.lifecycle.addObserver(it) - } + }) + observedLifecycle = true } if (binding == null) { binding = bind(thisRef.requireView()) } return binding!! } -} +} \ No newline at end of file diff --git a/viewbinding/src/main/java/com/dylanc/viewbinding/BindingViewHolder.kt b/viewbinding/src/main/java/com/dylanc/viewbinding/BindingViewHolder.kt index 589f56e..d47c6d8 100644 --- a/viewbinding/src/main/java/com/dylanc/viewbinding/BindingViewHolder.kt +++ b/viewbinding/src/main/java/com/dylanc/viewbinding/BindingViewHolder.kt @@ -30,7 +30,7 @@ import androidx.viewbinding.ViewBinding inline fun BindingViewHolder(parent: ViewGroup) = BindingViewHolder(inflateBinding(parent)) -class BindingViewHolder(val binding: VB) : RecyclerView.ViewHolder(binding.root) { +open class BindingViewHolder(val binding: VB) : RecyclerView.ViewHolder(binding.root) { constructor(block: (LayoutInflater, ViewGroup, Boolean) -> VB, parent: ViewGroup) : this(block(LayoutInflater.from(parent.context), parent, false)) diff --git a/viewbinding/src/main/java/com/dylanc/viewbinding/ViewBinding.kt b/viewbinding/src/main/java/com/dylanc/viewbinding/ViewBinding.kt index 1129eff..274dc59 100644 --- a/viewbinding/src/main/java/com/dylanc/viewbinding/ViewBinding.kt +++ b/viewbinding/src/main/java/com/dylanc/viewbinding/ViewBinding.kt @@ -71,20 +71,19 @@ class FragmentBindingDelegate( private val clazz: Class ) : ReadOnlyProperty { - private var lifecycleObserver: LifecycleObserver? = null + private var observedLifecycle = false private var binding: VB? = null - + @Suppress("UNCHECKED_CAST") override fun getValue(thisRef: Fragment, property: KProperty<*>): VB { - if (lifecycleObserver == null) { - lifecycleObserver = object : LifecycleObserver { + if (!observedLifecycle) { + thisRef.viewLifecycleOwner.lifecycle.addObserver(object : LifecycleObserver { @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY) fun onDestroyView() { binding = null } - }.also { - thisRef.viewLifecycleOwner.lifecycle.addObserver(it) - } + }) + observedLifecycle = true } if (binding == null) { binding = clazz.getMethod("bind", View::class.java) @@ -92,4 +91,4 @@ class FragmentBindingDelegate( } return binding!! } -} +} \ No newline at end of file