JectPack架构学习系列三_Databinding

继  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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章