ViewModel+LiveData+DataBinding使用

ViewModel+LiveData+DataBinding使用

Android DataBinding 使用博客说明

Android DataBinding 使用测试代码

:ViewModel、LiveData 使用

CSDN:ViewModel、LiveData 使用

在上面的内容中,知道了 DataBinding 的使用,以及 ViewModel和LiveData的使用,在LiveData的使用时,我们数据发生改变,如果需要更新UI,还需给数据增加一个监听:

    // 增加改变监听
    userViewModel.userLiveData.observe(this, Observer {user ->
        text_view.text = user.toString()
    })

这当然不是我们希望看到的,我们希望的是数据发生改变之后UI能够自动更新,而不是手动设置值更新UI界面。刚好,DataBinding 就能够实现这个功能,所以我们把 LiveData 和 DataBinding 一起使用,那么代码就更加的简洁了。


以下的内容使用到了 DataBinding 的相关知识,同时使用到了 ViewModel 和 LiveData,如果对着几个点不了解的,可以先通过上面的连接对相关的知识点进行了解。

ViewModel+LiveData+DataBinding使用

首先需要搭建 ViewModel+LiveData+DataBinding 环境:开启 DataBinding 支持,引入 ViewModel 和 LiveData 的依赖。具体怎样开启可以通过上面链接查看。

  1. 建立数据类

     data class User(var name: String = "", var age: Int = 0, var address: String)
    
  2. 建立 ViewModel 类 UserViewModel

     class UserViewModel : ViewModel() {
         var userData: MutableLiveData = MutableLiveData()
     
         init {
             userData.value = User("张三", 24, "杭州")
     
             // 延迟3秒后修改数据,UI自动更新
             Thread{
                 SystemClock.sleep(3000)
                 userData.value!!.name  = "李四"
                 userData.postValue(userData.value)
             }.start()
         }
     
         override fun onCleared() {
             Log.i("UserViewModel","onCleared:ViewModel 即将销毁")
         }
     }
    
  3. 布局文件,布局文件中引入 UserViewModel

     
     
     
         
             
         
     
     
         
     
             
     
         
     
     
    
    • 标签内容表示引入UserViewModel
    • android:text="@{userViewModel.userData.name}"UserViewModel 的变量 userData 的值设置给 TextView控件
  1. Activity:Activity的代码非常简单了

     class MainActivity : AppCompatActivity() {
    
         override fun onCreate(savedInstanceState: Bundle?) {
             super.onCreate(savedInstanceState)
             var mainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main)
     
             mainBinding.userViewModel = ViewModelProviders.of(this).get(UserViewModel::class.java)
             mainBinding.lifecycleOwner = this
     
         }
     }
    
    • mainBinding.userViewModel = ViewModelProviders.of(this).get(UserViewModel::class.java)给布局文件设置 UserViewModel
    • mainBinding.lifecycleOwner = this表示调用DataBinding#setLifecycleOwner(@Nullable LifecycleOwner lifecycleOwner) 方法,调用了这个方法,我们使用的LiveData就能够感应到相关组件的生命周期,在对应的时候更新UI。

你可能感兴趣的:(ViewModel+LiveData+DataBinding使用)