![78dbc00ee0d27d0fbf231ae4902489ad.png](https://i-blog.csdnimg.cn/blog_migrate/f88831f8f265d445e87afbd4e48ba9e8.png)
Android Jetpack 架构组件 -- dataBinding
在10月底开始学习JetPack ,如下笔记目的是记录自己的学习过程。
配置
module : app 中的build.gradle 开启,
android{
...
defauleConfig{
...
dataBinding{
enabled = true
}
}
}
或者
android{
...
defauleConfig{
...
dataBinding.enabled = true
}
}
}
add dependencies(添加依赖)
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
sync now 一下
配置成功后,开始编写我们的ViewModel,用这个ViewModel来存放我们界面的数据
数据 -- MyViewModel
public class MyViewModel extends ViewModel {
private MutableLiveData<Integer> number;
public MutableLiveData<Integer> getNumber() {
if (number == null) {
number = new MutableLiveData<>();
number.setValue(0);
}
return number;
}
public void addNumber(){
number.setValue(number.getValue() + 1);
}
}
Lauyot 布局 -- MainActivity
主要是放一个TextView 和 一个Buttom
ok之后,在布局最外面(父布局),alt +enter 或者点击小电灯泡。
![9260ad6b1c3a7bd58a49459ebe8e23d3.png](https://i-blog.csdnimg.cn/blog_migrate/33e67fb23cd6c47cb132ef5d31799a74.png)
转换成数据绑定布局
成功后,将变成由<layout>标签包裹的,还多了<data>标签
![f3ddb7cf7749fdbca8abeb1c9aa529a2.png](https://i-blog.csdnimg.cn/blog_migrate/299ac52978c5c0abde3f134eb74f47f6.png)
加入我们的MyViewModel数据
<variable
name="data"
type="com.chenjiahua.androidmvvmtest.MyViewModel" />
name 随便起,没有需要注意的
type 我们创建的MyViewModle
需要把数据在界面显示,
TextView中的
android:text="@{String.valueOf(data.number)}"
Buttom中实现点击
android:onClick="@{()->data.addNumber()}"
data是我们的起的数据来源的name,就是我们类型type -- MyViewModel
我个人理解是 : MyViewModel data = ...;
number 是data的域,addNumber()是方法。
需要提的是使用方法需要用的是lambda表达式
@{...}
界面显示 MainActivity
在布局转换成功为data binding layout 后,gradle编译器会自动生成一个与之对应的绑定类
绑定类的命名规则:驼峰化xml文件名 + Binding.java(驼峰命名 :单词首字母大写 属性,方法:第一个单词首字母小写,类,接口则是首字母都大写)
public class MainActivity extends AppCompatActivity {
ActivityMainBinding mMainBinding;
MyViewModel mMyViewModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mMainBinding = DataBindingUtil.setContentView(this,R.layout.activity_main);
mMyViewModel = new ViewModelProvider(this).get(MyViewModel.class);
mMainBinding.setData(mMyViewModel);
mMainBinding.setLifecycleOwner(this);
}
}
结束
后期需要补充添加有关recyclerView的数据绑定实现。