如何在 Kotlin 中创建共享元素转换侦听器?

乔希

我在我的活动之间使用共享元素转换,我想延迟一些 UI 更新,直到从 ActivityA 到 ActivityB 的共享元素转换完成之后。

我正在用 Kotlin 编写应用程序,似乎无法使用从 Java 转换而来的任何解决方案。我试过了

val sharedElementEnterTransition = window.sharedElementEnterTransition
sharedElementEnterTransition.addListener(object : Transition.TransitionListener() {
    override fun onTransitionResume(transition: Transition) {
        super.onTransitionResume(transition)
    }
    override fun onTransitionPause(transition: Transition) {
        super.onTransitionPause(transition)
    }
    override fun onTransitionCancel(transition: Transition) {
        super.onTransitionCancel(transition)
    }
    override fun onTransitionStart(transition: Transition) {
        super.onTransitionStart(transition)
    }
    override fun onTransitionEnd(transition: Transition) {
        super.onTransitionEnd(transition)
    }
    override fun equals(other: Any?): Boolean {
        return super.equals(other)
    }
    override fun hashCode(): Int {
        return super.hashCode()
    }
    override fun toString(): String {
        return super.toString()
    }
})

onCreateActivityB 中,但类型不匹配:

Error:(80, 51) Type mismatch: inferred type is <no name provided> but Transition.TransitionListener! was expected

这对于每次super通话

Error:(98, 24) Abstract member cannot be accessed directly

我无法解决。

谢谢您的帮助。

出现了

您看到的类型不匹配发生在android.transition.Transition.TransitionListenerandroid.transition.support.Transition.TransitionListener之间(或者至少,这是我能够重现此问题的方式)。

window.sharedElementEnterTransition返回第Transition一种类型的对象,而您正在尝试传递第二种类型的实例。因为 TransitionListener 是一个接口并且一个不扩展另一个,所以它们不能互换。只需更改您的导入以删除support包,这应该可以编译和工作。

请注意,由于不再支持此功能,因此不向后兼容。我对转换不够熟悉,无法告诉您如何将该window访问器转换为兼容版本。

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章