Android 场景和过渡,逻辑在第一个场景后不起作用
Android Scenes & Transitions, logic doesn't work after first scene
我有一个具有 3 个场景的授权Activity,它们只是字段数量不同,所以当用户出现时 Activity 首先运行 "splash scene",用2 个按钮(登录、注册),通过点击每个用户看到相同的 activity 但不同的场景。通过单击“后退”按钮上的 ,我更改了场景 ,例如,如果用户登录,则单击后退 -> 将场景更改为飞溅。
现在我遇到了一个问题,当他在 第一次登录 时,键入文本(验证有效,逻辑有效,一切都很酷),然后他决定返回,然后再次登录(逻辑错误,验证无效,事情很糟糕)
内存在增长,所以我猜问题出在场景的多个对象上,因为如果我登录并且所有字段都正确填写调试显示我的模型是空的。我感谢任何帮助)
去注册
fun goSignUpTransition(v: View) {
TransitionManager.beginDelayedTransition(rootContainer_AS, changeBounds)
back.isClickable = true
splashSceneFields.sceneRoot.visibility = View.GONE
val layoutParams = innerArcContainer_SSM.layoutParams
layoutParams.height = signUpHeaderHeight
innerArcContainer_SSM.layoutParams = layoutParams
val pp = localRoot.layoutParams as LinearLayout.LayoutParams
pp.topMargin = signUpMargin
this.signUpContainer.visibility = View.VISIBLE
this.signUpContainer.animate().alpha(1f).start()
this.wellaLogo_SA.visibility = View.GONE
this.wellaLogo_SA.animate().alpha(0f).start()
this.title_SSM.text = getString(R.string.sign_up_text)
val alpha = this.toolbarControllers_SSM.animate().alpha(1f)
alpha.duration = ANIM_DURATION
alpha.start()
TransitionManager.go(signUpScene)
splashSceneFields.sceneRoot.visibility = View.VISIBLE
}
返回
fun goSplashTransition(v: View) {
galleryBottomSheet.photoURI = null
userPhoto_SSM.setImageResource(R.drawable.ic_photo_upload_white_big)
TransitionManager.beginDelayedTransition(rootContainer_AS, changeBounds)
splashSceneFields.sceneRoot.visibility = View.GONE
val layoutParams = innerArcContainer_SSM.layoutParams
layoutParams.height = preAnimDimension
innerArcContainer_SSM.layoutParams = layoutParams
val pp = localRoot.layoutParams as LinearLayout.LayoutParams
pp.topMargin = 0
val animator = wellaLogo_SA.animate()
animator.scaleX(1f).scaleY(1f).duration = ANIM_DURATION
animator.start()
val alpha = this.toolbarControllers_SSM.animate().alpha(0f)
alpha.duration = ANIM_DURATION
alpha.start()
this.signUpContainer.animate().alpha(0f).start()
this.signUpContainer.visibility = View.GONE
this.wellaLogo_SA.visibility = View.VISIBLE
this.wellaLogo_SA.animate().alpha(1f).start()
TransitionManager.go(splashSceneFields)
back.isClickable = false
splashSceneFields.sceneRoot.visibility = View.VISIBLE
}
自己找的解决办法,每次场景来了,都要重新找一遍自己的view,设置listeners等等。场景有一个 setEnterAction
,你想在其中绑定 UI 或更新你的模型(我应该这样做)和 setExitAction
如果你有一些东西你必须 release/clear/update,在那里做。
我有一个具有 3 个场景的授权Activity,它们只是字段数量不同,所以当用户出现时 Activity 首先运行 "splash scene",用2 个按钮(登录、注册),通过点击每个用户看到相同的 activity 但不同的场景。通过单击“后退”按钮上的 ,我更改了场景 ,例如,如果用户登录,则单击后退 -> 将场景更改为飞溅。
现在我遇到了一个问题,当他在 第一次登录 时,键入文本(验证有效,逻辑有效,一切都很酷),然后他决定返回,然后再次登录(逻辑错误,验证无效,事情很糟糕)
内存在增长,所以我猜问题出在场景的多个对象上,因为如果我登录并且所有字段都正确填写调试显示我的模型是空的。我感谢任何帮助)
去注册
fun goSignUpTransition(v: View) {
TransitionManager.beginDelayedTransition(rootContainer_AS, changeBounds)
back.isClickable = true
splashSceneFields.sceneRoot.visibility = View.GONE
val layoutParams = innerArcContainer_SSM.layoutParams
layoutParams.height = signUpHeaderHeight
innerArcContainer_SSM.layoutParams = layoutParams
val pp = localRoot.layoutParams as LinearLayout.LayoutParams
pp.topMargin = signUpMargin
this.signUpContainer.visibility = View.VISIBLE
this.signUpContainer.animate().alpha(1f).start()
this.wellaLogo_SA.visibility = View.GONE
this.wellaLogo_SA.animate().alpha(0f).start()
this.title_SSM.text = getString(R.string.sign_up_text)
val alpha = this.toolbarControllers_SSM.animate().alpha(1f)
alpha.duration = ANIM_DURATION
alpha.start()
TransitionManager.go(signUpScene)
splashSceneFields.sceneRoot.visibility = View.VISIBLE
}
返回
fun goSplashTransition(v: View) {
galleryBottomSheet.photoURI = null
userPhoto_SSM.setImageResource(R.drawable.ic_photo_upload_white_big)
TransitionManager.beginDelayedTransition(rootContainer_AS, changeBounds)
splashSceneFields.sceneRoot.visibility = View.GONE
val layoutParams = innerArcContainer_SSM.layoutParams
layoutParams.height = preAnimDimension
innerArcContainer_SSM.layoutParams = layoutParams
val pp = localRoot.layoutParams as LinearLayout.LayoutParams
pp.topMargin = 0
val animator = wellaLogo_SA.animate()
animator.scaleX(1f).scaleY(1f).duration = ANIM_DURATION
animator.start()
val alpha = this.toolbarControllers_SSM.animate().alpha(0f)
alpha.duration = ANIM_DURATION
alpha.start()
this.signUpContainer.animate().alpha(0f).start()
this.signUpContainer.visibility = View.GONE
this.wellaLogo_SA.visibility = View.VISIBLE
this.wellaLogo_SA.animate().alpha(1f).start()
TransitionManager.go(splashSceneFields)
back.isClickable = false
splashSceneFields.sceneRoot.visibility = View.VISIBLE
}
自己找的解决办法,每次场景来了,都要重新找一遍自己的view,设置listeners等等。场景有一个 setEnterAction
,你想在其中绑定 UI 或更新你的模型(我应该这样做)和 setExitAction
如果你有一些东西你必须 release/clear/update,在那里做。