DataBinding的基本使用(四)
来源:互联网 发布:上海社保积分怎么算法 编辑:程序博客网 时间:2024/06/17 15:16
DataBinding的基本使用(四)
DataBinding基本使用包括以下内容:
- 单纯的摆脱findviewbyid
- 绑定基本数据类型及String
- 绑定Model数据
- 绑定事件
- 通过静态方法转换数据类型
- 通过运算符操作数据
- 自定义Binding的类名
- 绑定相同Model的操作
- model变量改变自动更新数据
- 绑定List/Map等集合数据
- Observable自动更新
- Databinding与include标签的结合
- DataBinding与RecyclerView的结合
3.10绑定List/Map等集合数据
布局文件
<?xml version="1.0" encoding="utf-8"?><!--布局以layout作为根布局--><layout> <data> <import type="java.util.ArrayList" /> <import type="java.lang.String" /> <variable name="list" type="ArrayList<String>" /> <!--泛型的支持会在编译时期报红线,但是是可以直接运行的 但是需要通过转义字符才行,如:<数据类型> 或者<数据类型>--> <import type="java.util.Map" /> <variable name="map" type="Map<String,String>" /> <variable name="arrays" type="String[]" /> </data> <!--我们需要展示的布局--> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:layout_width="match_parent" android:layout_height="56dp" android:text="@{list[0]}" /> <!--List集合既可以和数组一样通过索引获取值list[index]方式,也可以调用API--> <TextView android:layout_width="match_parent" android:layout_height="56dp" android:text="@{list.get(1)}" /> <TextView android:layout_width="match_parent" android:layout_height="56dp" android:text="@{map[`name`]}" /> <!--Map集合既可以通过map[key]的方式,也可以通过调用API--> <TextView android:layout_width="match_parent" android:layout_height="56dp" android:text="@{map.get(`age`)}" /> <TextView android:layout_width="match_parent" android:layout_height="56dp" android:text="@{arrays[0]}" /> <TextView android:layout_width="match_parent" android:layout_height="56dp" android:text="@{arrays[1]}" /> </LinearLayout></layout>
泛型的支持会在编译时期报红线,是可以直接运行的,但是需要通过转义字符才行,如:\<数据类型> 或者\<数据类型\>
ThirdActivity
public class ThirdActivity extends AppCompatActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); ActivityThirdBinding binding = DataBindingUtil.setContentView(ThirdActivity.this, R.layout.activity_third); ArrayList<String> list = new ArrayList<>(); list.add("first"); list.add("second"); binding.setList(list); Map<String, String> map = new HashMap<>(); map.put("name", "zhangsan"); map.put("age", "40"); binding.setMap(map); String[] arrays = {"lisi", "laowang"}; binding.setArrays(arrays); }}
3.11 Observable数据改变自动更新
Observable是一个接口,它的子类有BaseObservable,ObservableField,ObservableBoolean, ObservableByte, ObservableChar, ObservableShort, ObservableInt, ObservableLong, ObservableFloat, ObservableDouble, and ObservableParcelable,ObservableArrayList,ObservableArrayMap
<?xml version="1.0" encoding="utf-8"?><!--布局以layout作为根布局--><layout> <data> <import type="www.zhang.com.databinding.model.Animal"/> <variable name="animal" type="Animal"/> <variable name="list" type="android.databinding.ObservableArrayList<String>"/> <variable name="map" type="android.databinding.ObservableArrayMap<String,String>"/> </data> <!--我们需要展示的布局--> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:layout_width="match_parent" android:layout_height="56dp" android:text="@{animal.field}" /> <TextView android:layout_width="match_parent" android:layout_height="56dp" android:text="@{String.valueOf(animal.age)}" /> <TextView android:layout_width="match_parent" android:layout_height="56dp" android:text="@{list[0]}" /> <!--Map集合既可以通过map[key]的方式,也可以通过调用API--> <TextView android:layout_width="match_parent" android:layout_height="56dp" android:text="@{list[1]}" /> <TextView android:layout_width="match_parent" android:layout_height="56dp" android:text="@{map[`name`]}" /> <TextView android:layout_width="match_parent" android:layout_height="56dp" android:text="@{map[`age`]}" /> <Button android:id="@+id/four_btn" android:layout_width="match_parent" android:text="改变数据" android:layout_height="wrap_content" /> </LinearLayout></layout>
Animal类
public class Animal { public final ObservableField<String> field = new ObservableField<>(); public final ObservableInt age = new ObservableInt();}
FourActivity
package www.zhang.com.databinding;public class FourActivity extends AppCompatActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); ActivityFourBinding binding = DataBindingUtil.setContentView(FourActivity.this, R.layout.activity_four); final Animal animal = new Animal(); animal.field.set("cat"); animal.age.set(2); binding.setAnimal(animal); final ObservableArrayList<String> list = new ObservableArrayList<>(); list.add("dog"); list.add("mouse"); binding.setList(list); final ObservableArrayMap<String, String> map = new ObservableArrayMap<>(); map.put("name","Tom"); map.put("age","4"); binding.setMap(map); binding.fourBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { animal.field.set("dog"); animal.age.set(4); list.set(0,"cat"); list.set(1,"dog"); map.put("name","Sam"); map.put("age","5"); } }); }}
当Animal属性数据改变,list/map集合数据改变,会自动更新数据,我们不需要自己手动设置,省去了一个操作,让我们更专注于业务逻辑。
2 0
- DataBinding的基本使用(四)
- DataBinding的基本使用
- DataBinding的基本使用(一)
- DataBinding的基本使用(二)
- DataBinding的基本使用(三)
- DataBinding的基本使用(五)
- DataBinding基本使用(1)
- DataBinding基本使用(2)
- DataBinding基本使用(3)
- DataBinding基本使用(4)
- DataBinding基本使用(5)
- DataBinding系列(二):DataBinding的基本用法
- Android DataBinding(一) 基本使用
- DataBinding基本使用
- databinding基本使用
- Android进阶四:Databinding的使用(基础篇)
- DataBinding使用教程(一):配置与基本使用
- DataBinding使用教程(一):配置与基本使用
- [hdu5604/bestcoder67E]merge
- DataBinding的基本使用(三)
- 九个Console命令,让js调试更简单
- HDU 2159 FATE (二维完全背包)
- win7装机
- DataBinding的基本使用(四)
- mybatis 一对多,多对一
- Valid Parentheses_Leetcode_#20
- 如何做项目技术选型
- DataBinding的基本使用(五)
- 一篇文章弄懂CSS3的content属性
- zookeeper 介绍(译)
- 解决方案之任务队列
- Android Studio把Eclipse android项目当作依赖库lib来使用的一些问题解决