一、声明
此篇仅仅叙述DataBinding的基本用法以及搭配ViewModel实现VIew和Model的双向绑定。
ViewModel在JetPack的作用:持久化数据;
DataBinding的作用是:实现View和Model的双向绑定
二、ViewModel基本用法
继承ViewModel后,将Activity中需要保存的数据存放在ViewModel中,当Activity切换横竖屏时,保存在ViewModel中的数据不会丢失。
public class MainActivity extends AppCompatActivity {
private MyViewModel viewModel;
private EditText editText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewModel = new MyViewModel();
editText = findViewById(R.id.edit);
editText.setText((String)viewModel.getWord());
}
public void click(View view) {
viewModel.setWord("xixi");
}
}
.public class MyViewModel<T> extends ViewModel {
public T getWord() {
return word;
}
public void setWord(T word) {
this.word = word;
}
private T word;
}
三、ViewModel+LiveData+DataBinding
3.1 DataBinding简介
此处借用一下QQ音乐团队绘制的一张图片说明,DataaBinding的作用。
3.2 使用方法:
在app的build.gradle中添加如下:
dataBinding {
enabled = true
}
(1)第一种方式:
此处必须要申明layout标签,data标签申明数据源
在textView和EditView同时绑定同一个user.name数据源,当通过编辑EditView中的数据时,TextView也会发生相应的变化。
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable
name="user"
type = "com.example.myviewmodel.databinding.model.User">
</variable>
</data>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<Button
android:id="@+id/btn1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="按钮">
</Button>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android