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