Kotlin android livedata未在活动、viewmodel中工作
您好,我最近遇到了一个在livedata中无法进行观察的情况,所以我要问一个问题 这太基本了,但我不知道为什么不行,所以我需要你的帮助 如果你能教我一点,我将不胜感激 我的注册活动Kotlin android livedata未在活动、viewmodel中工作,kotlin,mvvm,Kotlin,Mvvm,您好,我最近遇到了一个在livedata中无法进行观察的情况,所以我要问一个问题 这太基本了,但我不知道为什么不行,所以我需要你的帮助 如果你能教我一点,我将不胜感激 我的注册活动 class SignUpActivity : BaseKotlinActivity<ActivitySignUpBindingImpl, SignUpViewModel>() { override val layoutResourceId: Int get() = R.layout.activi
class SignUpActivity : BaseKotlinActivity<ActivitySignUpBindingImpl, SignUpViewModel>() {
override val layoutResourceId: Int get() = R.layout.activity_sign_up
override val viewModel: SignUpViewModel by viewModel()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val binding = DataBindingUtil.setContentView<ActivitySignUpBindingImpl>(this, layoutResourceId)
binding.apply {
lifecycleOwner = this@SignUpActivity
signUpViewModel = viewModel
}
viewModel?.apply {
signUpStep.observe(this@SignUpActivity, Observer {
when (it) {
SignUpStep.SIGN_UP -> supportFragmentManager.beginTransaction().replace(R.id.fragment, SignUpFragment(), "SignUpFragment").commit()
SignUpStep.PASSWORD -> supportFragmentManager.beginTransaction().replace(R.id.fragment, SignUpPasswordFragment(), "SignUpPasswordFragment").commit()
SignUpStep.PHONE_CERTIFICATION -> supportFragmentManager.beginTransaction().replace(R.id.fragment, SignUpPhoneCertificationFragment(), "SignUpPhoneCertificationFragment").commit()
else -> Unit
}
Log.d("Test Checked1", "${signUpStep.value}")
})
}
}
}
如果查看日志,可以看到moveStep正常更改。然后signUpSteop已正常更改,但由于屏幕未移动且日志未显示,因此不会在livedata的观察中接收到它
我只是想知道是代码错了还是怎么了。你能帮我吗
作为参考,signUpStep在片段中不断变化,而livedata在活动中不断被观察到。你能发布更新viewModel的片段代码吗?我猜你的片段没有使用与活动相同的viewModel实例。嗨,lvan,它在我的片段中没有任何作用,既然活动正在观察ViewModel中的数据,我是否需要在片段中进行观察?这是一个简单的问题,因为我缺乏技能。不,您应该能够从片段更新viewModel,并将更改传播到所有侦听viewModel更改的人。我需要查看您的片段代码,以验证它使用的是与您的活动相同的ViewModel实例。感谢lvan,感谢您的建议,我能够解决它
private val _signUpStep = MutableLiveData<SignUpStep>(SignUpStep.SIGN_UP)
val signUpStep: LiveData<SignUpStep>
get() = _signUpStep
fun moveStep(view: View, newSignUpStep: SignUpStep) {
val oldSignUpStep = _signUpStep.value
_signUpStep.value = newSignUpStep
Log.d( "Test Checked","moveStep: $oldSignUpStep -> $newSignUpStep")
}
Test Checked1: SIGN_UP
moveStep: SIGN_UP -> PASSWORD
moveStep: PASSWORD -> PASSWORD
moveStep: PASSWORD -> PASSWORD