【发布时间】:2020-06-11 19:02:02
【问题描述】:
我有一个应用程序,它有一个主要的活动和片段依赖于它,所以这是正常的。
现在,我的 10 个片段中有两个需要通信,我使用这里给出的示例
https://developer.android.com/topic/libraries/architecture/viewmodel.html#sharing
class SharedViewModel : ViewModel() {
val selected = MutableLiveData<Item>()
fun select(item: Item) {
selected.value = item
}
}
class MasterFragment : Fragment() {
private lateinit var itemSelector: Selector
// Use the 'by activityViewModels()' Kotlin property delegate
// from the fragment-ktx artifact
private val model: SharedViewModel by activityViewModels()
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
itemSelector.setOnClickListener { item ->
// Update the UI
}
}
}
class DetailFragment : Fragment() {
// Use the 'by activityViewModels()' Kotlin property delegate
// from the fragment-ktx artifact
private val model: SharedViewModel by activityViewModels()
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
model.selected.observe(viewLifecycleOwner, Observer<Item> { item ->
// Update the UI
})
}
}
现在,如果 MasterFragment 和 DetailFragment 死掉(两者都执行 popBackStack()),视图模型的实例是否会保持活动状态,直到我完成包含此 Fragments 的 MainActivity?因为现在我不再需要那个 viewmodel 实例了,但是根据文档所说,这个实例将从包含这些片段的 Activity 中保留
这不是我想要在片段之间进行通信的东西,因为现在该视图模型的新实例将与我创建的过去相同,我的意思是,它将重用我已经使用的实例弹出片段,我需要额外处理删除或重置此视图模型中的所有数据,而不是获取新的新视图模型。
它是否以这种方式工作,或者当堆栈中不再有依赖于它的片段时,该实例会自动死亡?
【问题讨论】:
标签: android android-fragments kotlin android-architecture-components android-viewmodel