我读了文档,但在某些部分变得迷惑了。
ViewModel对象被设计为比views或LifeCycleOwners的特定实例化更长寿。这种设计还意味着您可以编写测试以更容易地覆盖ViewModel,因为它不知道视图和生命周期对象。ViewModel对象可以包含LifecycleObservers,如LiveData对象。但是,ViewModel对象绝不能观察到生命周期感知的可观察对象(如LiveData对象)的更改。如果ViewModel需要应用程序上下文,例如查找一个系统服务,它可以扩展AndroidViewModel类,并拥有一个构造函数来接收构造函数中的应用程序,因为Application类扩展了上下文。
这部分对我来说有点迷惑
但是,ViewModel对象绝不能观察到生命周期感知的可观察对象(如LiveData对象)的更改。
这是指这种执行吗?
片断
class AboutFragment : Fragment() {
private lateinit var aboutViewModel: AboutViewModel
private var _binding: FragmentAboutBinding? = null
// This property is only valid between onCreateView and
// onDestroyView.
private val binding get() = _binding!!
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
aboutViewModel =
ViewModelProvider(this).get(AboutViewModel::class.java)
_binding = FragmentAboutBinding.inflate(inflater, container, false)
val root: View = binding.root
val textView = binding.aboutTxt
//Observe changes
aboutViewModel.text.observe(viewLifecycleOwner, {
textView.text = it
})
return root
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
}
视图模型
class AboutViewModel : ViewModel() {
private val _text = MutableLiveData<String>().apply {
value = "Foobar......"
}
fun setText(text: String){ _text.value = text}
val text: LiveData<String> = _text
}
或者这就是他们的意思livedata
不要做的?
这意味着您永远不应该在viewmodel中的livedata对象上使用observe
,而应该在activity/片段中使用observe
,就像您已经在做的那样