📜  Android 中使用 ViewModel 进行数据绑定

📅  最后修改于: 2022-05-13 01:54:37.724000             🧑  作者: Mango

Android 中使用 ViewModel 进行数据绑定

先决条件:

  • 视图模型
  • 数据绑定

在 ViewModel 中集成数据绑定有什么好处?简单地说,它提供了VIEW 与其数据(或可以说是 View 的数据)之间的轻松通信。正如我们所知,视图是在 XML 文件中定义的,XML 文件与它们的活动或片段文件相关联,但它们的数据存储在 ViewModel 对象中。因此,如果数据要与视图通信,则 Activity 或 Fragment 文件将充当中介。这也将提高开发人员的生产力,因为它减少了样板代码。因此,在本文中,我们将了解如何直接连接 ViewModel 对象中的 View 及其数据。

想要一个更快节奏和更具竞争力的环境来学习 Android 的基础知识吗?
单击此处前往由我们的专家精心策划的指南,旨在让您立即做好行业准备!

执行

我们将通过使用 Kotlin 创建一个简单的应用程序来学习这一点。

创建一个带有空活动的应用程序。当我们使用数据绑定时,我们需要在build.gradle文件中启用数据绑定

创建一个 ViewModel 类

Kotlin
class MainViewModel : ViewModel() {
    var text = " Welcome to my application "
  
    fun updateText() {
        text = " Text is Updated "
    }
}


XML


  
    
        
    
  
    
  
        
  
        


Kotlin
class MainActivity : AppCompatActivity() {
  
    lateinit var binding: ActivityMainBinding
    lateinit var mainViewModel: MainViewModel
  
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
  
        mainViewModel = MainViewModel()
  
        binding.mainViewModel = mainViewModel
    }
}


现在我们需要在 XML 中创建一个布局并在 XML 布局中创建一个变量。使用数据标签我们声明一个变量。

XML



  
    
        
    
  
    
  
        
  
        

现在,我们需要在 Activity 中创建一个绑定对象,将数据传递给我们在 XML 布局和 MainViewModel 对象中定义的变量作为视图的数据源。

科特林

class MainActivity : AppCompatActivity() {
  
    lateinit var binding: ActivityMainBinding
    lateinit var mainViewModel: MainViewModel
  
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
  
        mainViewModel = MainViewModel()
  
        binding.mainViewModel = mainViewModel
    }
}

输出:

我们的应用程序已准备就绪,并且可以正常工作,因为我们可以看到存储在 ViewModel 对象中的文本形式的数据。因此,我们开始了解如何在不借助任何中间人的情况下直接将 View 与其数据进行通信。但是,在这个应用程序中,有一个问题,如果我们点击 UPDATE TEXT 按钮,文本不会按预期更新,但会保持不变。这是因为对于任何新的数据更改,我们需要再次将更改文本( Data )设置到 View 中,因此我们需要在 Activity 文件中定义一个函数来更新视图。但是我们不希望将 View 与 Activity 进行通信。

所以这里我们可以使用Live Data ,简单的说,Live data 就是观察者数据持有者类。如果我们将任何数据声明为 LiveData,那么这些数据就可以被 Activity、Fragment 等 Android 组件观察到。视图会自动更新。在本文中,我们仅讨论了使用 ViewModel 进行数据绑定,在下一篇文章中,我们还将看到使用 LiveData 进行数据绑定。