开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 3天,点击查看活动详情
相信做Android开发的同学都知道DataBinding吧,它是 Google 在 Jetpack 中推出的一款数据绑定的支持库,利用该库可以实现在页面组件中直接绑定应用程序的数据源。维护更加方便,架构明确简洁。说到它不得不提一嘴ViewBinding,两货名字很相似,都可以绑定视图,但ViewBinding最大的功能也就是绑定视图解放双手了。DataBinding还可做到数据绑定,但需结合ViewModel使用。
什么,上官网发现DataBinding最近更新停留再19年9月,使用文档也停留在20年6月,这是又要放弃亲儿子的操作吗?
我猜可能是Google近几年开始往声明式UI方向发展(Jetpack Compose),这两者本就相互矛盾。之前也体验过Compose,总体感觉有好有坏,列表还卡顿,所以暂时搁置一旁,这里我们分享下DataBinding中遇到的一些问题。
DataBinding基础配置和使用这里就不展开讲解,本文就DataBinding在Xml引入集合和TextView文字拼接做个记录。
如何在TextView中做文字拼接?
1、使用+号方式
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{bean.age+`周岁`,default=默认值}"/>
或者
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text='@{bean.age+"周岁",default=默认值}'/>
其实就是双引号和单引号做拼接,要么外层单引号内部拼接使用+和双引号,要么外层双引号内层就使用+和单引号。
2、使用String format方式
<string name="joint">字符串1: %1$s,字符串2:%2$s</string>
android:text= "@{@string/joint(str1, str2)}"
如何在XML中引入集合?
初入DataBinding的时候在开发中会遇到各式各样问题,上面的拼接问题解决了,不一会又遇到自定义的集合引入问题,一写就报错啊。相信走到这一步的同学们一定遇到过在XML中写条件判断的情况,IDE会提示报错,根据提示引导会将原有的符号转为一些特殊符号作为区分,可以理解为这就是DataBinding能理解的语言。在XML引入集合也是这样:
<data>
<import type="java.util.ArrayList" />
<import type="java.util.Map" />
<!--type最后的String规定了集合的泛型是String,相当于ArrayList<String>)-->
<variable
name="list"
type="ArrayList<String>" />
<!--type中<String,String>相当于Map<String,String>-->
<variable
name="map"
type="Map<String,String>" />
</data>
使用的时候也有一点区别:
<!--Map使用-->
<TextView
android:id="@+id/tv_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="@{map.get(`age`)}" />
<!--List使用-->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/tv_name"
android:layout_centerHorizontal="true"
android:text="@{list.get(1)}" />
以上就是在使用DataBinding时,XML中集合引入和文字拼接的全部内容,在此做个记录,希望对大家有所帮助。
开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 3天,点击查看活动详情