Data Binding

2016-07-12  本文已影响0人  Ted_Wang

文件配置

注意gradle的配置不能低于1.5.0

android {    
     compileSdkVersion 23   
     buildToolsVersion "23.0.2"    
     defaultConfig {        
          applicationId "com.example.admin.myapplication"        
          minSdkVersion 9        
          targetSdkVersion 23        
          versionCode 1        
          versionName "1.0"        
          multiDexEnabled true    
    }    
    //需要一起配置进去
    allprojects {        
        repositories {           
             jcenter()        
        }    
    }    
    buildTypes {        
        release {            
            minifyEnabled false            
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'        
        }    
    }    
    //databinding的配置
    dataBinding{        
        enabled true    
    }
}

布局文件

布局文件的根节点不在是Viewgroup而是变成了layout,新增一个节点data

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android" >    
    <data>                
        <variable           
             name="company"           
             type="com.example.admin.myapplication.Company" />   
     </data>   
    <LinearLayout       
        android:orientation="vertical"       
        android:layout_width="wrap_content"       
        android:layout_height="wrap_content"       >       
        <TextView          
            android:layout_width="wrap_content"           
            android:layout_height="wrap_content"           
            android:text="@{company.companyName}"/>   
    </LinearLayout>
</layout>

data节点也支持import属性

<data> 
    <import type="com.example.admin.myapplication.Company" /> 
    <variable name="company" type="Company" />
</data>

build.gradle 中添加的那个插件 - com.android.databinding会根据 xml 文件的名称 Generate 一个继承自ViewDataBinding的类。

生成规则

将我们布局文件的首字母大写,并且去掉下划线,将下划线后面的字母大写,加上Binding.
比如xml文件activity_main.xml ->ActivityMainBinding

双向绑定Observable Binding

目前只支持单项绑定

BR是编译阶段生成的一个类,功能与 R.java类似,用 @Bindable标记过 getter方法会在 BR中生成一个 entry
还有更细粒度的绑定方式

public final ObservableField<String> companyName= new ObservableField<>();

数据对象

public class Company extends BaseObservable {    
    private String companyName;        
    @Bindable    
    public String getCompanyName() {        
        return companyName;    
    }    
    @Bindable    
    public void setCompanyName(String companyName) {        
        this.companyName = companyName;  
        notifyPropertyChanged(com.example.admin.myapplication.BR.companyName);    
    }    
}

参考文章:https://github.com/LyndonChin/MasteringAndroidDataBinding
http://blog.csdn.net/qibin0506/article/details/47393725

上一篇下一篇

猜你喜欢

热点阅读