【发布时间】:2020-05-28 11:16:53
【问题描述】:
最近选择使用 LiveData,我在初始化变量时遇到了问题。 我有 2 个活动(我不使用导航,但这不是重点):
- 一个是通过 API 获取项目的列表
- 另一个是上一个列表中所选项目的详细活动
问题是我需要能够在创建模式下查阅 Detail Activity,即在我的 ViewModel 中,对象不能通过 Retrofit 检索,而是通过新的实例化创建。
目前是这样处理的:
详细活动:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.details)
val isNew = intent.extras?.getBoolean("new")
if (isNew) {
// Trigger lazy property
viewModel.value
} else {
viewModel.getDetails()
}
presenter.value.observe(this, Observer { value ->
value?.let {
displayDetails(it)
}
})
}
视图模型
class DetailsPresenter(private val repository: WorkOrderRepository)
: ViewModel(), LifecycleObserver {
val value: MutableLiveData<Details> by lazy { MutableLiveData(Details("")) }
fun getDetails() {
RetrofitClient.getDetails()
.onSuccess {
this.value.value = it
}
}
}
这个方法的问题是我的 displayDetails() 方法被调用了两次。 一个用于延迟初始化,另一个用于查看现有项目。
我以后如何在代码中初始化 LiveData?
【问题讨论】:
标签: android kotlin android-livedata android-viewmodel