Android开发DataBinding之XML中集合引入和文字拼接

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 3天,点击查看活动详情

相信做Android开发的同学都知道DataBinding吧,它是 Google 在 Jetpack 中推出的一款数据绑定的支持库,利用该库可以实现在页面组件中直接绑定应用程序的数据源。维护更加方便,架构明确简洁。说到它不得不提一嘴ViewBinding,两货名字很相似,都可以绑定视图,但ViewBinding最大的功能也就是绑定视图解放双手了。DataBinding还可做到数据绑定,但需结合ViewModel使用。

什么,上官网发现DataBinding最近更新停留再19年9月,使用文档也停留在20年6月,这是又要放弃亲儿子的操作吗? 我猜可能是Google近几年开始往声明式UI方向发展(Jetpack Compose),这两者本就相互矛盾。之前也体验过Compose,总体感觉有好有坏,列表还卡顿,所以暂时搁置一旁,这里我们分享下DataBinding中遇到的一些问题。 1675649919564.jpg

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&lt;String>" />

        <!--type中&lt;String,String&gt相当于Map<String,String>-->
        <variable
            name="map"
            type="Map&lt;String,String&gt;" />
    </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天,点击查看活动详情