From 5c8fb401a4c907089d201ab905366bb2546acb3e Mon Sep 17 00:00:00 2001 From: Zhuinden Date: Sat, 23 Jan 2021 15:44:01 +0100 Subject: [PATCH] Fix a bug in AutoClearedValue when viewLifecycleOwner goes directly from CREATED -> DESTROYED while Fragment is still not STARTED --- .../example/github/util/AutoClearedValue.kt | 24 ++++++++++++------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/GithubBrowserSample/app/src/main/java/com/android/example/github/util/AutoClearedValue.kt b/GithubBrowserSample/app/src/main/java/com/android/example/github/util/AutoClearedValue.kt index eed7535f..cbb9d54c 100644 --- a/GithubBrowserSample/app/src/main/java/com/android/example/github/util/AutoClearedValue.kt +++ b/GithubBrowserSample/app/src/main/java/com/android/example/github/util/AutoClearedValue.kt @@ -19,7 +19,7 @@ package com.android.example.github.util import androidx.fragment.app.Fragment import androidx.lifecycle.DefaultLifecycleObserver import androidx.lifecycle.LifecycleOwner -import androidx.lifecycle.observe +import androidx.lifecycle.Observer import kotlin.properties.ReadWriteProperty import kotlin.reflect.KProperty @@ -32,15 +32,23 @@ class AutoClearedValue(val fragment: Fragment) : ReadWriteProperty { + val viewLifecycleOwner = it ?: return@Observer + + viewLifecycleOwner.lifecycle.addObserver(object: DefaultLifecycleObserver { + override fun onDestroy(owner: LifecycleOwner) { + _value = null + } + }) + } + fragment.lifecycle.addObserver(object: DefaultLifecycleObserver { override fun onCreate(owner: LifecycleOwner) { - fragment.viewLifecycleOwnerLiveData.observe(fragment) { viewLifecycleOwner -> - viewLifecycleOwner?.lifecycle?.addObserver(object: DefaultLifecycleObserver { - override fun onDestroy(owner: LifecycleOwner) { - _value = null - } - }) - } + fragment.viewLifecycleOwnerLiveData.observeForever(viewLifecycleOwnerLiveDataObserver) + } + + override fun onDestroy(owner: LifecycleOwner) { + fragment.viewLifecycleOwnerLiveData.removeObserver(viewLifecycleOwnerLiveDataObserver) } }) }