Android Data Binding

请注明链接:https://blog.csdn.net/feather_wch/article/details/79789597

Data Binding

1、DataBinding引入

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"

    //这里
    dataBinding {
        enabled true
    }
    ...
}

2、用layout标签包裹布局,通过make project自动生成XXXBinding.java文件

3、DataBinding的优缺点

  1. DataBinding库非常小
  2. DataBinding没有多余的性能损耗(都是在编译时完成)
  3. DataBinding能减少错误率,只要使用正确,能100%无低级错误,提高代码质量。
  4. DataBinding会增加一点编译时长

4、DataBinding中的布局

<data>
    <variable
        name="user"
        type="com.feather.databind.User"/>
</data>

<android.support.constraint.ConstraintLayout
    xxx>
    <TextView
        xxx
        android:text="@{user.username}" />
</android.support.constraint.ConstraintLayout>

@{user.username}会从指定的User类中依次寻找getUsername()username()username属性

5、DataBinding中的属性

//绑定设设置数据
protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   MainActivityBinding binding = DataBindingUtil.setContentView(this, R.layout.main_activity);
   User user = new User("Test", "User");
   binding.setUser(user);
}
//再次获得Binding对象
MainActivityBinding binding = MainActivityBinding.inflate(getLayoutInflater());

//在ListView或者RecyclerView的adapter中绑定列表的Item
ListItemBinding binding = ListItemBinding.inflate(layoutInflater, viewGroup, false);
//or
ListItemBinding binding = DataBindingUtil.inflate(layoutInflater, R.layout.list_item, viewGroup, false);

6、DataBinding中import与变量定义(基本类型、List、Map)

1-import

<data>
        <import type="com.feather.databind.User" alias="myuser"/>
        <variable
            name="user"
            type="myuser"/>
</data>

2-基本类型

<variable
    name="age"
    type="int"/>

<TextView
    android:id="@+id/age"
    xxx
    android:text="@{String.valueOf(age)}"
/>
mBinding.setAge(20);

3-集合(List、Map、Array)

<import type="java.util.Map"/>
<import type="java.util.ArrayList"/>
<variable name="list" type="ArrayList&lt;String&gt;"/>
<variable name="map" type="Map&lt;String,String&gt;"/>
<variable name="arrays" type="String[]"/>

<TextView
    xxx
    android:text="@{list.get(0)+map.get(`age`)+arrays[0]}"
    />
ArrayList<String> list = new ArrayList();
list.add("list0");
HashMap<String, String> hashMap = new HashMap<>();
hashMap.put("age", "28");
String[] arrays = new String[]{"China", "America"};

mBinding.setList(list);
mBinding.setMap(hashMap);
mBinding.setArrays(arrays);

7、DataBinding更改生成的位置和名称

<data class="com.feather.DataBinding">

参考和学习资料

  1. Databing 集合类的使用
  2. Data Binding 使用详解
  3. Data Binding 从抵触到爱不释手

猜你喜欢

转载自blog.csdn.net/feather_wch/article/details/79789597