无法检索 removeGhost 方法
Failed to retrieve removeGhost method
我正在我的应用程序中放置 Android 导航组件。
一些过渡工作正常,但对于这个我有一个错误。来自片段 A 的转换视图停留在新片段 (B) 上并隐藏了一些元素。此外,当我在片段中滚动时,视图不会随之滚动。这是我得到的错误:
W/t.qoqa.ui.debu: Accessing hidden method Landroid/view/GhostView;->removeGhost(Landroid/view/View;)V (greylist-max-p, reflection, denied)
I/GhostViewApi21: Failed to retrieve removeGhost method
java.lang.NoSuchMethodException: android.view.GhostView.removeGhost [class android.view.View]
我从片段 A 中的 RecyclerView 开始,在点击时我设置了唯一的转换名称。
然后,我使用 SafeArgs 将此名称作为参数与 FragmentNavigatorExtras 中的视图一起传递。
在片段 B 中,我延迟了 onCreate 中的转换:postponeEnterTransition()
并设置过渡类型:
transition = TransitionSet().apply {
addTransition(ChangeTransform())
addTransition(ChangeBounds())
startDelay = 150
}
sharedElementEnterTransition = transition
sharedElementReturnTransition = transition
我在onViewCreated中设置的名字:ViewCompat.setTransitionName(product_image, args.imageTransitionName)
最后,当图像准备好显示时,Glide Listener 开始转换:
listener = object: RequestListener<Drawable> {
override fun onLoadFailed(
e: GlideException?,
model: Any?,
target: Target<Drawable>?,
isFirstResource: Boolean
): Boolean {
startPostponedEnterTransition()
return false
}
override fun onResourceReady(
resource: Drawable?,
model: Any?,
target: Target<Drawable>?,
dataSource: DataSource?,
isFirstResource: Boolean
): Boolean {
startPostponedEnterTransition()
return false
}
}
并且 return 转换也不起作用。
我只使用 androidx.transition.*
个元素
在此先感谢您的帮助
我在 Google 从事 Transitions 库的工作。
此问题意味着您已将 Android 10(Q) 设置为 targetSdkVersion 并使用过时版本的过渡库。旧版本使用反射从 Android 框架访问私有方法,现在限制从 Q 开始(当您将其指定为 targetSdk,而不是 compileAdk 时)。较新的版本不再使用反射。
要解决此问题,您需要将过渡库版本更新到至少 1.2.0
https://developer.android.com/jetpack/androidx/releases/transition#1.2.0
我正在我的应用程序中放置 Android 导航组件。
一些过渡工作正常,但对于这个我有一个错误。来自片段 A 的转换视图停留在新片段 (B) 上并隐藏了一些元素。此外,当我在片段中滚动时,视图不会随之滚动。这是我得到的错误:
W/t.qoqa.ui.debu: Accessing hidden method Landroid/view/GhostView;->removeGhost(Landroid/view/View;)V (greylist-max-p, reflection, denied)
I/GhostViewApi21: Failed to retrieve removeGhost method
java.lang.NoSuchMethodException: android.view.GhostView.removeGhost [class android.view.View]
我从片段 A 中的 RecyclerView 开始,在点击时我设置了唯一的转换名称。
然后,我使用 SafeArgs 将此名称作为参数与 FragmentNavigatorExtras 中的视图一起传递。
在片段 B 中,我延迟了 onCreate 中的转换:postponeEnterTransition()
并设置过渡类型:
transition = TransitionSet().apply {
addTransition(ChangeTransform())
addTransition(ChangeBounds())
startDelay = 150
}
sharedElementEnterTransition = transition
sharedElementReturnTransition = transition
我在onViewCreated中设置的名字:ViewCompat.setTransitionName(product_image, args.imageTransitionName)
最后,当图像准备好显示时,Glide Listener 开始转换:
listener = object: RequestListener<Drawable> {
override fun onLoadFailed(
e: GlideException?,
model: Any?,
target: Target<Drawable>?,
isFirstResource: Boolean
): Boolean {
startPostponedEnterTransition()
return false
}
override fun onResourceReady(
resource: Drawable?,
model: Any?,
target: Target<Drawable>?,
dataSource: DataSource?,
isFirstResource: Boolean
): Boolean {
startPostponedEnterTransition()
return false
}
}
并且 return 转换也不起作用。
我只使用 androidx.transition.*
个元素
在此先感谢您的帮助
我在 Google 从事 Transitions 库的工作。 此问题意味着您已将 Android 10(Q) 设置为 targetSdkVersion 并使用过时版本的过渡库。旧版本使用反射从 Android 框架访问私有方法,现在限制从 Q 开始(当您将其指定为 targetSdk,而不是 compileAdk 时)。较新的版本不再使用反射。 要解决此问题,您需要将过渡库版本更新到至少 1.2.0 https://developer.android.com/jetpack/androidx/releases/transition#1.2.0