Android 进阶之设计模式 三 MVVM模式 DataBinding [一] 搭建开发环境
今天要讲的是DataBinding,在Google 2015 IO大会上推出了DataBinding 这个新特性, 它是以一个support库的形式发布,所以可以在所有的Android平台上使用它。但是它对Android Studio 以及Gradle的版本有一定的要求。
Android Studio 至少是1.3.0-beta1 Gradle至少是1.3以上。这个对大家来说应该是没啥大问题吧,如果没有满足这两个条件,大家Google下就可以解决了。
刚开始我们先搭建一个很简单很简单的例子,让大家属性下环境的搭建:
首先检查下gradle版本是否正确,在项目根目录下检查build.gradle,这是我的配置:
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.1.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}在模块的build.gradle 中 使用如下配置,打开DataBinding支持:
dataBinding {
enabled true
}下面是我的模块build.gradle
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "23.0.3"
dataBinding {
enabled true
}
defaultConfig {
applicationId "com.idealist.databindingdemo"
minSdkVersion 15
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.3.0'
}到此为止已经完成了环境的配置。
修改布局文件:用一个layout节点将原先的布局给包裹住,layout中分成两类,一类是data,一类是布局:
重点是data的配置:
在data节点中variable是必备的属性,name是这个变量的名字,type一般是包含Bean所处包名的全路径。当然也包含import属性。
定义好data节点后就可以使用${} 对 bean进行访问了,比如这里的@{user.lastName},这时候会调用UserBean的getlastName()方法,所以一般Bean都需要有get/set方法
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<import type="com.idealist.databindingdemo.bean.UserBean"/>
<variable
name="user"
type="UserBean"/>
</data>
<LinearLayout
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.idealist.databindingdemo.MainActivity">
<TextView
android:gravity="center"
android:text="@{user.firstName}"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<TextView
android:gravity="center"
android:text="@{user.lastName}"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
</layout>下面是Userbean的源码
public class UserBean {
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
private String firstName;
private String lastName;
public UserBean(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
}点击运行,这时候会产生一个ActivityMainBinding类位于/DataBindingDemo/app/build/intermediates/classes/debug/com/idealist/databindingdemo/databinding/ActivityMainBinding.java
这个名字是根据布局生成的,这个类名可以指定的,后面会介绍这点。
接下来就可以使用这个Binding将数据绑定到布局上了,修改MainActivity如下所示:public class MainActivity extends AppCompatActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
UserBean userBean = new UserBean("Android", "OS");
binding.setUser(userBean);
}
}点击运行,会看到如下的结果: