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

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