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,在那里做。