这是因为ViewModel观察者在创建时只与生命周期拥有者绑定,并不会感知配置更改。如果您将它更改为LiveData,它将与活动或碎片无法跨方向更改。要解决这个问题,您可以使用LifecycleBoundObserver,它会感知生命周期的变化而不是方向的变化。将以下代码添加到您的ViewModel类中:
class MyViewModel : ViewModel() {
private val mData = MutableLiveData()
init {
mData.value = "Initial Value"
}
fun setData(data: String) {
mData.value = data
}
//添加LifecycleObserver
fun observeData(owner: LifecycleOwner, observer: Observer) {
mData.observe(LifecycleBoundObserver(owner, observer))
}
}
然后,您可以像这样观察LiveData:
class MyActivity : AppCompatActivity() {
private lateinit var mViewModel: MyViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
mViewModel = ViewModelProviders.of(this).get(MyViewModel::class.java)
//观察LiveData
mViewModel.observeData(this, Observer { data ->
//数据观察者更新
})
}
}