无法获取removeGhost方法

7

我正在将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
    }
}

同时返回过渡效果也无法正常工作。
我仅使用androidx.transition.*元素。

提前感谢您的帮助。

1个回答

4
我在 Google 的转场库 (Transitions library) 工作。这个问题意味着你将 Android 10(Q) 设置为目标 SDK 版本,并且使用了过时的转场库版本。旧版本使用反射技术来访问 Android Framework 的私有方法,但是自从 Q 版本(当你将其设为目标SDK版本,而不是compileAdk)开始就被禁止了。新版本不再使用反射技术。要解决此问题,你需要将转场库版本更新至至少1.2.0版。 https://developer.android.com/jetpack/androidx/releases/transition#1.2.0

@Andrey 在1.2.0版本中,我也遇到了同样的错误。它尝试使用反射来查找removeGhost方法,但失败了。 - Dharmendra
@Dharmendra,我非常确定这不应该发生,因为在1.2.0中没有剩余的反射。你确定版本实际上已经更新了吗?如果问题仍然存在,请在此处提交错误报告:https://issuetracker.google.com/issues/new?component=460400。谢谢。 - Andrey Kulikov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接