Skip to content
This repository was archived by the owner on Dec 9, 2024. It is now read-only.

Commit 0387d1d

Browse files
Unregistering callbacks for components when the parent fragment view is destroyed
1 parent dea24ed commit 0387d1d

File tree

3 files changed

+29
-25
lines changed

3 files changed

+29
-25
lines changed

DrawableAnimations/app/src/main/java/com/example/android/drawableanimations/ViewBindingDelegates.kt

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,15 @@
1616

1717
package com.example.android.drawableanimations
1818

19+
import android.R
1920
import android.view.View
21+
import androidx.constraintlayout.widget.ConstraintLayout
2022
import androidx.fragment.app.Fragment
2123
import androidx.lifecycle.Lifecycle
2224
import androidx.lifecycle.LifecycleEventObserver
2325
import androidx.viewbinding.ViewBinding
2426

27+
2528
/**
2629
* Retrieves a view binding handle in a Fragment. The field is available only after
2730
* [Fragment.onViewCreated].
@@ -45,12 +48,18 @@ inline fun <reified BindingT : ViewBinding> Fragment.viewBindings(
4548
cached = null
4649
}
4750
}
48-
49-
override val value: BindingT
50-
get() = cached ?: bind(requireView()).also {
51-
viewLifecycleOwner.lifecycle.addObserver(observer)
52-
cached = it
53-
}
51+
// val mConstraintLayout: ConstraintLayout = findViewById(R.id.constraintLayoutParent)
52+
// var layout: View = layoutInflater.inflate(R.layout.activity_list_item, null)
53+
// override val value: BindingT
54+
// get() = cached ?: bind(requireView()).also {
55+
// viewLifecycleOwner.lifecycle.addObserver(observer)
56+
// cached = it
57+
// }
58+
override val value: BindingT
59+
get() = cached ?: bind(requireView()).also {
60+
viewLifecycleOwner.lifecycle.addObserver(observer)
61+
cached = it
62+
}
5463

5564
override fun isInitialized() = cached != null
5665
}

DrawableAnimations/app/src/main/java/com/example/android/drawableanimations/demo/animated/AnimatedFragment.kt

Lines changed: 8 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,9 @@
1616

1717
package com.example.android.drawableanimations.demo.animated
1818

19-
import android.content.Context
2019
import android.graphics.drawable.Drawable
2120
import android.os.Bundle
2221
import android.view.View
23-
import androidx.activity.OnBackPressedCallback
2422
import androidx.fragment.app.Fragment
2523
import androidx.vectordrawable.graphics.drawable.Animatable2Compat
2624
import androidx.vectordrawable.graphics.drawable.AnimatedVectorDrawableCompat
@@ -29,31 +27,21 @@ import com.example.android.drawableanimations.databinding.AnimatedFragmentBindin
2927
import com.example.android.drawableanimations.viewBindings
3028

3129
class AnimatedFragment : Fragment(R.layout.animated_fragment) {
32-
3330
private val binding by viewBindings(AnimatedFragmentBinding::bind)
34-
override fun onAttach(context: Context) {
35-
super.onAttach(context)
36-
val callback: OnBackPressedCallback = object : OnBackPressedCallback(
37-
true
38-
) {
39-
override fun handleOnBackPressed() {
40-
binding.stop.performClick()
41-
activity?.supportFragmentManager?.popBackStack()
42-
}
43-
}
44-
requireActivity().onBackPressedDispatcher.addCallback(
45-
this,
46-
callback
47-
)
48-
}
4931

32+
override fun onDestroyView() {
33+
super.onDestroyView()
34+
(binding.icon.drawable as? AnimatedVectorDrawableCompat)?.clearAnimationCallbacks()
35+
}
5036

5137
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
38+
5239
val icon = AnimatedVectorDrawableCompat.create(
5340
requireContext(),
5441
R.drawable.ic_hourglass_animated
5542
)!!
56-
icon.registerAnimationCallback(object: Animatable2Compat.AnimationCallback() {
43+
44+
icon.registerAnimationCallback(object : Animatable2Compat.AnimationCallback() {
5745
override fun onAnimationStart(drawable: Drawable?) {
5846
binding.start.isEnabled = false
5947
binding.stop.isEnabled = true
@@ -69,3 +57,4 @@ class AnimatedFragment : Fragment(R.layout.animated_fragment) {
6957
binding.stop.setOnClickListener { icon.stop() }
7058
}
7159
}
60+

DrawableAnimations/app/src/main/java/com/example/android/drawableanimations/demo/seekable/SeekableFragment.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import android.os.Bundle
2020
import android.view.View
2121
import android.widget.SeekBar
2222
import androidx.fragment.app.Fragment
23+
import androidx.vectordrawable.graphics.drawable.AnimatedVectorDrawableCompat
2324
import androidx.vectordrawable.graphics.drawable.SeekableAnimatedVectorDrawable
2425
import com.example.android.drawableanimations.R
2526
import com.example.android.drawableanimations.databinding.SeekableFragmentBinding
@@ -29,6 +30,11 @@ class SeekableFragment : Fragment(R.layout.seekable_fragment) {
2930

3031
private val binding by viewBindings(SeekableFragmentBinding::bind)
3132

33+
override fun onDestroyView() {
34+
super.onDestroyView()
35+
(binding.icon.drawable as? AnimatedVectorDrawableCompat)?.clearAnimationCallbacks()
36+
}
37+
3238
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
3339
// You can use the same XML format of <animated-vector> to inflate a
3440
// SeekableAnimatedVectorDrawable.

0 commit comments

Comments
 (0)