Java 如何在活动午餐开始时停止观察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

我有一个活动,它有一个ViewModel,该活动观察ViewModel的liveData 当我第一次启动活动时,它可以工作,但当我再次返回时,我需要像新的一样,但它仍然在观察LiveData,它向我显示旧的数据。我该怎么办?(哦,请记住,我无法创建新活动)

这是我的活动

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事件