请注明链接: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的优缺点
DataBinding
库非常小DataBinding
没有多余的性能损耗
(都是在编译时完成)DataBinding
能减少错误率,只要使用正确,能100%
无低级错误,提高代码质量。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<String>"/>
<variable name="map" type="Map<String,String>"/>
<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">