当前位置: 首页 > 知识库问答 >
问题:

Android ViewModel LiveData文档

韦宏扬
2023-03-14

我读了文档,但在某些部分变得迷惑了。

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 object> > 不要做的?

共有1个答案

颛孙博易
2023-03-14

这意味着您永远不应该在viewmodel中的livedata对象上使用observe,而应该在activity/片段中使用observe,就像您已经在做的那样

 类似资料:
  • 开始 使用Medoo是非常简单的事! 要求 PHP 5.1+, 推荐 PHP 5.4+ , PDO 支持. 支持 MySQL, MSSQL, SQLite 等数据库. 如果使用 php_pdo_xxx (xxx = 数据库类型) 你需要在 php.ini 中启用相关扩展. 需要懂一些SQL语法. Tips 在 PHP 5.4+ 中你可以使用 [] 作为参数,否则只能使用 array(). // O

  • 开始 使用Medoo是非常简单的事! Medoo1.2开始不支持PHP5.4或以下,若你使用的是1.2以前的版本,请选择菜单 中文文档(<1.2) 要求 PHP>=5.4, 必须支持PDO. 支持 MySQL, MSSQL, SQLite 等数据库. 确保php_pdo_xxx (xxx = 数据库类型) 的xxx数据扩展已经正确安装并启用. 需要懂一些SQL知识. Tips 在PHP5.4+中你

  • 这个网站提供 SliTaz GNU/Linux 官方和社区文档。 我们相信全世界的 SliTaz 用户都愿意分享他们的知识和经验。这是一个开放的 wiki,所有人都可以为完善作出贡献。我们对于那些努力使 SliTaz 更容易使用的志愿者表示感谢。欢迎你们! 使用指南 & 开发指南 使用指南 - 这本使用指南是Slitaz社区为Slitaz初级用户提供的文档。这本指南能帮助你快速在Slitaz起步,

  • hana for visual studio 2017 库所提供的所有头文件的列表 boost hana concept applicative.hpp comonad.hpp comparable.hpp constant.hpp euclidean_ring.hpp foldable.hpp functor.hpp group.hpp hashable.hpp integral_constan

  • MathJax 是一个 JavaScript 引擎,用来显示网络上的数学公式。它可以工作于所有流行的浏览器上。

  • PhoneGap 是一个采用HTML,CSS和JavaScript的技术,创建移动跨平台移动应用程序的快速开发平台。它使开发者能够在网页中调用IOS,Android,Palm,Symbian,WP7,WP8,Bada和Blackberry等智能手机的核心功能——包括地理定位,加速器,联系人,声音和振动等,此外PhoneGap拥有丰富的插件,可以调用。

  • 本文档为 Mootools 1.4.5 官方翻译文档,Mootools 对大部分浏览器原生对象做了扩展,所以使用 Mootools 与使用原生 javascript对象相似。

  • Snap.svg 这个 JavaScript 可以让你像 jQuery 操作 DOM 一样操作 SVG 资源,Snap.svg 是专为现代浏览器打造,支持剪裁,遮罩,纹理,渐变,分组等功能。凭借丰富的动画库和易于的事件处理,Snap.svg 可以帮助你轻松实现 SVG 功能。