Java 如何在活动午餐开始时停止观察liveData?
我有一个活动,它有一个ViewModel,该活动观察ViewModel的liveData 当我第一次启动活动时,它可以工作,但当我再次返回时,我需要像新的一样,但它仍然在观察LiveData,它向我显示旧的数据。我该怎么办?(哦,请记住,我无法创建新活动) 这是我的活动Java 如何在活动午餐开始时停止观察liveData?,java,android,android-studio,kotlin,mvvm,Java,Android,Android Studio,Kotlin,Mvvm,我有一个活动,它有一个ViewModel,该活动观察ViewModel的liveData 当我第一次启动活动时,它可以工作,但当我再次返回时,我需要像新的一样,但它仍然在观察LiveData,它向我显示旧的数据。我该怎么办?(哦,请记住,我无法创建新活动) 这是我的活动 class LoginActivity : AppCompatActivity() { lateinit var idEditText: EditText lateinit var createAccountTextView
class LoginActivity : AppCompatActivity() {
lateinit var idEditText: EditText
lateinit var createAccountTextView: TextView
lateinit var loginButton: Button
private lateinit var userRepository: UserRepository
private lateinit var loginActivityViewModel: LoginActivityViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_login)
userRepository = UserRepository(application)
loginActivityViewModel = ViewModelProviders.of(
this,
LoginActivityViewModelFactory(userRepository)
).get(LoginActivityViewModel::class.java)
idEditText = findViewById(R.id.idEditText)
loginButton = findViewById(R.id.enterButton)
createAccountTextView = findViewById(R.id.createAccountTextView)
loginButton.setOnClickListener {
val loginID = idEditText.text.toString()
loginActivityViewModel.userEntry(loginID)
}
createAccountTextView.setOnClickListener {
val createAccountIntent = Intent(this, CreateAccountActivity::class.java)
startActivity(createAccountIntent)
finish()
}
}
override fun onResume() {
super.onResume()
loginActivityViewModel.idEditTextMutableLiveData.observe(this, Observer {
idEditText.error = it
})
loginActivityViewModel.onSuccessMutableLiveData.observe(this, Observer {
val mainIntent = Intent(this, MainActivity::class.java)
mainIntent.putExtra(loginValue, UserUI(it.username, it.userId.toInt()))
startActivity(mainIntent)
})
}
}使用Livedata的目的是获取数据源的最新更新。如果数据源是持久的,则意味着返回的数据将始终相同 您需要做的是在应用程序/活动启动时清除数据源。然后,您可以边走边填充数据源 只要数据源有数据,Livedata将始终返回数据
一种解决方法是避免完全返回livedata对象,而只返回对象本身。添加您迄今为止尝试过的内容,我或多或少会说同样的话。RXJava为不同类型的观察者提供了处理类似事情的选项。如果你愿意,你可以很容易地在简历中设置你想要的初始值。我不相信这是反MVVM模式,因为UI事件可以将数据发送到ViewModel。返回活动是一个UI事件