继 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奉上: