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

时间:2018-03-19 12:05:47

标签: android kotlin android-animation

我在我的活动之间使用共享元素转换,并且我希望延迟一些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()
    }
})
在ActivityB中的onCreate

,但是输入的类型不匹配:

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

我无法解决。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

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

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

请注意,由于这不再支持,因此它不向后兼容。我对转换不熟悉,告诉你如何将window访问器转换为compat版本。