如何在 Kotlin 中创建共享元素转换监听器?
How can I create a Shared-element Transition Listener in 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()
}
})
在 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
我无法解决。
感谢您的帮助。
您看到的类型不匹配出现在 android.transition.Transition.TransitionListener
和 android.transition.support.Transition.TransitionListener
类 之间。 (或者至少,这是我能够重现此问题的方式)。
window.sharedElementEnterTransition
returns 第一种 Transition
类型的对象,而您正试图传递第二种类型的实例。因为 TransitionListener 是一个接口并且一个不扩展另一个,所以它们不可互换。只需更改您的导入以删除 support
包,这应该可以编译并工作。
请注意,由于不再支持它,因此它不向后兼容。我对转换不够熟悉,无法告诉您如何将 window
访问器转换为兼容版本。
我正在我的活动之间使用共享元素转换,我想延迟一些 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
我无法解决。
感谢您的帮助。
您看到的类型不匹配出现在 android.transition.Transition.TransitionListener
和 android.transition.support.Transition.TransitionListener
类 之间。 (或者至少,这是我能够重现此问题的方式)。
window.sharedElementEnterTransition
returns 第一种 Transition
类型的对象,而您正试图传递第二种类型的实例。因为 TransitionListener 是一个接口并且一个不扩展另一个,所以它们不可互换。只需更改您的导入以删除 support
包,这应该可以编译并工作。
请注意,由于不再支持它,因此它不向后兼容。我对转换不够熟悉,无法告诉您如何将 window
访问器转换为兼容版本。