前言:DataBinding的介绍
数据绑定库是一种支持库,借助该库,您可以使用声明性格式(而非程序化地)将布局中的界面组件绑定到应用中的数据源。
要开始使用数据绑定,必须将应用配置为使用数据绑定,在应用模块的build.gradle 文件中添加 dataBinding 元素
android { ... dataBinding { enabled = true } }
接下来我们使用一个例子,来理解和使用DataBinding
一、首先创建布局页面activity_data_binding.xml,注:这里直接就是使用的DataBinding的特性,将数据直接绑定到界面中
<?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="data" type="com.example.app2.viewModel.ViewModelWithDataBinding" /> </data> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".DataBindingActivity"> <TextView android:id="@+id/tv_text" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="50dp" android:gravity="center" android:text="@{String.valueOf(data.number)}" android:textSize="20sp" /> <Button android:id="@+id/btn_add" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_marginTop="150dp" android:onClick="@{()->data.add()}" android:text="+1" /> </RelativeLayout> </layout>
二、创建ViewModelWithDataBinding类继承自ViewModel
public class ViewModelWithDataBinding extends ViewModel { private MutableLiveData<Integer> number; public MutableLiveData<Integer> getNumber() { if (number == null){ number = new MutableLiveData<>(); number.setValue(0); } return number; } public void add(){ number.setValue(number.getValue()+1); } }
三、DataBindingActivity中的代码,注释已经在代码中给出
public class DataBindingActivity extends AppCompatActivity { private ViewModelWithDataBinding viewModelWithDataBinding; //当我们将layout文件转换为DataBinding的形式,Android studio会帮我们创建这样一个类 //这个类的名称就是layout文件的名字 加上Binding private ActivityDataBindingBinding binding; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //创建这个对象后,layout文件里面的标签,就会成为ActivityDataBindingBinding这个类的成员,可以直接访问 binding = DataBindingUtil.setContentView(this,R.layout.activity_data_binding); viewModelWithDataBinding = new ViewModelProvider(this).get(ViewModelWithDataBinding.class); binding.setData(viewModelWithDataBinding); binding.setLifecycleOwner(this); } }
这样一个简单的使用数据绑定库构建的程序就完成了。
效果如图所示: