gpt4 book ai didi

屏幕旋转后 Android Arch 组件 ViewModel 和 LiveData 触发

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:16:39 25 4
gpt4 key购买 nike

我在使用 ViewModelLiveData 架构组件时遇到问题。当使用 fragments 并旋转屏幕时,观察者会被触发...

我试图移动 viewModel = ViewModelProviders.of(this).get(MainViewModel::class.java)在所有 fragment 生命周期方法中,但没有成功。

我的场景相对简单:

  1. 带有电子邮件和密码的登录屏幕
  2. 用户点击“登录”按钮
  3. viewmodel 调用 login(email, password) 并设置 LiveData 对象的值
  4. 暂时简单地 toast

此时一切正常。但是当我旋转屏幕时,Toast 会再次出现而无需任何用户交互。

我必须在 onDestroyView() 中做些什么吗?

提前致谢!

最佳答案

Ok 终于找到问题所在以及如何解决了。 LiveData 不是为单个事件设计的。出于这个原因,有几种方法可以修复或处理它,这两个链接对我很有用:

Jose Alcérreca's post dealing with this problem

Jose Alcérreca's EventObserver

Jose Alcérreca's SingleLiveEvent class

基本上:

在 View 模型中:

var eventLiveData: MutableLiveData<Event<ErrorResponse>> = MutableLiveData()

在 Activity 或 Fragment 中:

viewModel.eventLiveData.observe(this, EventObserver {
it?.let {
shortToast(it.message)
}
})

关于屏幕旋转后 Android Arch 组件 ViewModel 和 LiveData 触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51450215/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com