DataBinding的使用


DataBinding 配合 LiveData 和 ViewModel 使用

  1. 需要创建MyViewModel类,继承ViewModel
  2. 需要添加DataBinding的gradle(app)配置信息

添加配置信息 在gradle(app)中添加 ↓

创建MyViewModel ↓

/**
 *   @DATE : 2020/7/24
 *   @Time : 21:10
 *   @By : TheCara
 *  负责处理界面数据
 *  需要 LiveData 来观察数据刷新UI
 */
class MyViewModel : ViewModel() {
    var numberLiveData = MutableLiveData<Int>()

    init {
        numberLiveData.value = 0
    }
    // 加值
    fun add() {
        numberLiveData?.value = numberLiveData?.value?.plus(1)
    }
}

修改MainActivity ↓

/*
* 需要 ActivityMainBinding 类用来绑定数据
* 需要 MyViewModel 来和 ActivityMainBinding 绑定数据
* */
class MainActivity : AppCompatActivity() {
    var myViewModel: MyViewModel? = null    // 设置类型为可空类型
    var activityMainBinding: ActivityMainBinding? = null    //ActivityMainBinding 是在DataBingding配置完成之后自动生成的
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // 初始化DataBindingUtil,用来绑定布局
        activityMainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main)
        // 初始化数据类
        var myViewModel = ViewModelProviders.of(this).get(MyViewModel::class.java)
        activityMainBinding?.myViewModel=myViewModel
        activityMainBinding?.lifecycleOwner = this

    }
}

布局 使用 “data” 标签 ↓

需要 layout 布局保存布局,需要 “data “标签保存绑定来的数据,需要 “variable” 标签设置变量。

需要使用 “@{}” 方式访问变量 ↓

需要使用 “@{(参数)->方法(参数)}”访问方法 ↓

demo ↓

什么是DataBinding

DataBinding是谷歌在2015年I/O开发者大会上发布的一个数据绑定框架,也就是把数据捆绑到UI上,DataBinding可以让Activity和Fragment减少逻辑,使其方便维护。同时也能提高性能,避免空指针异常,同时DataBinding也支持双向绑定,使UI的改变同时同步到数据上,DataBinding不是MVVM架构的必需品。

DataBinding有哪些优缺点

优点

  1. 减少Activity和Fragment的逻辑处理,使Activity和Fragment逻辑更加清晰。
  2. 提高性能,避免内存泄漏以及空指针
  3. 支持双向绑定,当View改变的时候会通知Model,当Model改变时会通知View

缺点

  1. bug难定位,出现bug时无法定位到是View中的bug还是Model中的bug,又或是编写的逻辑bug。
  2. 双向绑定不利于View的复用

引用:https://juejin.im/post/5edb12346fb9a047da364349#heading-2


文章作者: TheCara
版权声明: 本博客所有文章除特別声明外,均采用 CC BY-NC 4.0 许可协议。转载请注明来源 TheCara !
 上一篇
RecyclerView在Kotlin中的使用 RecyclerView在Kotlin中的使用
创建项目RecyclerExample项目需要引入依赖 需要子项布局在 “RecyclerViewExample\app\src\main\res\layout”下创建 “example_item.xml” 👇 <?xml vers
2020-07-26
下一篇 
LiveData与ViewModel LiveData与ViewModel
单独使用LiveData 创建LiveData实例。持有特定的数据类型,例如 int ,String。 创建一个Observer对象,并且实现onChanged()方法。在onChanged()方法类可以进行UI的刷新等。 使用LiveDa
2020-07-20
  目录