Jetpack Compose with WindowManager - 无法在分离视图上启动此动画器

问题描述 投票:0回答:1

我目前正在开发一个名为 Floating-Bubble-View 的 Android 库,该库有助于在屏幕上创建浮动视图。最近,我添加了对

Composable
的支持,并且在自定义
LifecycleOwner
的帮助下,我可以毫无问题地显示/删除可组合项。但是,当滚动 LazyColumn 时,如果我在动画停止之前调用
removeView
,应用程序开始崩溃。这是错误信息:

Process: com.torrydo.testfloatingbubble, PID: 29264
java.lang.IllegalStateException: Cannot start this animator on a detached view!
at android.graphics.RenderNode.addAnimator(RenderNode.java:1469)
at android.graphics.animation.RenderNodeAnimator.setTarget(RenderNodeAnimator.java:288)
at android.graphics.animation.RenderNodeAnimator.setTarget(RenderNodeAnimator.java:277)
at android.graphics.drawable.RippleForeground.startPending(RippleForeground.java:139)
at android.graphics.drawable.RippleForeground.drawHardware(RippleForeground.java:168)
at android.graphics.drawable.RippleForeground.draw(RippleForeground.java:340)
at android.graphics.drawable.RippleDrawable.drawBackgroundAndRipples(RippleDrawable.java:848)
at android.graphics.drawable.RippleDrawable.draw(RippleDrawable.java:679)
at android.view.View.drawBackground(View.java:22581)
at android.view.View.draw(View.java:22342)
at androidx.compose.material.ripple.AndroidRippleIndicationInstance.drawIndication(Ripple.android.kt:204)

这是删除功能

fun remove() {
     builder.composeView?.also { composeView ->
        builder.composeLifecycleOwner?.onPause()
        builder.composeLifecycleOwner?.onStop()
        windowManager!!.removeView(composeView)
     }
}

基本可组合项,带有一个返回屏幕的按钮,以及一个

LazyColumn

android android-jetpack-compose android-service android-view android-windowmanager
1个回答
0
投票

感谢 Lan Lake 的建议,目前是 Google 的 Android SE。我意识到我在删除

onDestroy()
时没有打电话给
ComposeView
。结果,
composable
没有触发
disposal
。这是更新的代码片段。

builder.composeView?.also {
       builder.composeLifecycleOwner?.onPause()
       builder.composeLifecycleOwner?.onStop()
       builder.composeLifecycleOwner?.onDestroy() // added
       super.remove(it)
}
© www.soinside.com 2019 - 2024. All rights reserved.