我目前正在开发一个名为 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
感谢 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)
}