继 JectPack架构学习系列二_LiveData 第二章之后的第三章, 这一章我们重点讲讲Databinding.
当产品经理过来的时候, 说: 小何, 这个在界面不需要显示了, 这个按钮点击不是+1, 是+2 .
此时,我们是不是有一种想掏出一把长刀, 哈哈哈.
那么, 考虑到之前的模式MVC或者MVP, 当界面发生改变的时候, 修改xml修改界面, 因为Controler(界面)已经和View耦合掉了
, 所以Databinding能帮我们解决这个问题
1 在app.gradle配置
2 在布局文件中, 转换为databinding布局
3 添加ViewModel进布局文件
4 进行控件和ViewModel 数据的绑定
5 Activity代码编写
package com.hzhztech.databindingtest import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.widget.Button import android.widget.TextView import androidx.databinding.DataBindingUtil import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProviders import com.hzhztech.databindingtest.databinding.ActivityMainBinding import com.hzhztech.databindingtest.viewmodel.MyViewModel import kotlinx.android.synthetic.main.activity_main.* class MainActivity : AppCompatActivity() { lateinit var myViewModel:MyViewModel // lateinit var textView:TextView // lateinit var button: Button //BuildProject 自动生成的一个类 这是DataBinding方式一, 方式二是直接在xml中绑定数据 lateinit var binding:ActivityMainBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) //方法一需要 // setContentView(R.layout.activity_main) binding = DataBindingUtil.setContentView(this,R.layout.activity_main) //方法一不需要 // textView = findViewById(R.id.textView) //方法一不需要 // button = findViewById(R.id.button) myViewModel = ViewModelProviders.of(this).get(MyViewModel::class.java) // 方式一的控件全部在binding中进行管理 ActivityMainBinding是google自动生成的一个类 // myViewModel.number.observe(this,object :Observer<Int> { // override fun onChanged(t: Int?) { // binding.textView.text = myViewModel.number.value.toString() // } // }) // // binding.button.setOnClickListener { // myViewModel.addNumber() // } //方式二 换成这个方式 在xml中进行数据的显示和绑定 binding.data = myViewModel binding.lifecycleOwner = this } }此刻, 就大功告成了. 最后Databinding代码和 一个篮球计数器的Demo奉上:
https://github.com/2402zmybie/DatabindingTest
https://github.com/2402zmybie/Score