1.环境
androidx
dataBinding {
enabled true
}
1.JetPackViewModel
package myjetpack
import android.app.Application
import androidx.lifecycle.AndroidViewModel
import androidx.lifecycle.MutableLiveData
import java.util.*
class JetPackViewModel(application: Application) : AndroidViewModel(application) {
var mMutableLiveData: MutableLiveData<String>? = null
init {
mMutableLiveData = MutableLiveData()
mMutableLiveData?.value = getString()
}
private fun getString() = Random().nextInt().toString()
private fun setText() {
mMutableLiveData?.value = getString()
}
fun onClick() {
setText()
}
}
2.activity_jetpack.xml
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable
name="mViewModel"
type="myjetpack.JetPackViewModel" />
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="66dp"
android:text="@{mViewModel.mMutableLiveData}" />
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="@{()->mViewModel.onClick()}"
android:text="Button" />
</LinearLayout>
</layout>
3.JetPackActivity.java
package myjetpack
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.databinding.DataBindingUtil
import com.zhisheng.test.R
import com.zhisheng.test.databinding.ActivityJetpackBinding
class JetPackActivity : AppCompatActivity() {
var mJetPackViewModel: JetPackViewModel? = null
var mActivityJetpackBinding: ActivityJetpackBinding? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// mJetPackViewModel = ViewModelProvider(this,ViewModelProvider.AndroidViewModelFactory(application)).get(JetPackViewModel::class.java)
mJetPackViewModel = JetPackViewModel(application)
mActivityJetpackBinding = DataBindingUtil.setContentView(this, R.layout.activity_jetpack)
mActivityJetpackBinding?.mViewModel = mJetPackViewModel
mActivityJetpackBinding?.lifecycleOwner = this
}
}
布局文件
databinding是用layout标签,将数据data和原本的layout包起来,编译时会拆分成2个,以xxx.xml为例:
build/intermediates/data_binding_layout_info_type_merge/debug/mergeDebugResources/out/xxx-layout.xml
incremental/mergeDebugResources/stripped.dir/layout/xxx.xml
网友评论