无法检索removeGhost方法

马洛兹

我在我的应用程序中放置了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.*元素

先谢谢您的帮助

安德烈·库里科夫(Andrey Kulikov)

我在Google的Transitions库中工作。此问题意味着您已将Android 10(Q)设置为targetSdkVersion,并使用了过时的过渡库版本。旧版本使用反射来实现Android框架中的私有方法,该方法现在从Q开始受到限制(当您将其指定为targetSdk而不是compileAdk时)。较新的版本不再使用反射。要解决此问题,您需要将过渡库版本至少更新为1.2.0 https://developer.android.com/jetpack/androidx/releases/transition#1.2.0

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章