Android端MVVM从入门到实战(第四篇) - DataBinding运算符

前言

之前的文章中我们了解了DataBinding的基础用法和数据绑定,这一章我们来了解一下DataBinding中的运算符,以便我们在实战中能熟练的运用这些运算符方便我们的开发。

参考代码地址:GitHub - guoergongzi/GMVVMDemo

参考代码Module:gdatabindingdemo3

1、算术运算符

说到运算,四则运算一定是我们首先想到的。加法运算+、减法运算-、惩罚运算*、除法运算/、求余运算%五种运算,我们只以加法运算做一个示范。首先我们准备在activity_main中声明并使用两个int类型的变量:

<variable
    name="num1"
    type="Integer" />

<variable
    name="num2"
    type="Integer" />

。。。

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@{String.valueOf(num1 + num2),default = 100}"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

然后我们在MainActivity中给这两个变量赋值:

mainBinding.setNum1(123);
mainBinding.setNum2(234);

运行代码,发现显示在界面上的正是123+234的结果357,这就是DataBinding中四则运算的写法。

2、字符串合并

众所周知,java中字符串合并操作也是通过操作符+来实现的,那么在DataBinding中是不是也是这样呢?我们在activity_main中准备两个String类型的变量并试试这个操作:

<variable
    name="str1"
    type="String" />

<variable
    name="str2"
    type="String" />

。。。

<TextView
    android:id="@+id/tv_2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@{str1 + str2,default = 测试字符串}"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@id/tv_1" />

再分别给str1和str2赋值:

mainBinding.setStr1("aaa");
mainBinding.setStr2("bbb");

运行后TextView显示aaabbb,说明我们的猜测是正确的,DataBinding中也可以用+符号来实现字符串合并操作。

3、逻辑运算符

在开发中,我们应该对逻辑运算符&&和||不陌生,但是我们把它用在DataBinding时要注意一个细节,DataBinding的表达式中不支持直接使用&和|这两个字符,因此我们对这两个字符进行一下转义。首先我们准备一下xml文件内容:

<variable
    name="boolean1"
    type="Boolean" />

<variable
    name="boolean2"
    type="Boolean" />

。。。

<TextView
    android:id="@+id/tv_3"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@{String.valueOf(boolean1 && boolean2)}"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@id/tv_2" />

这里我们可以看到我们直接使用了&&,在Android Studio中这里应该是变红的,这时候mac按下option+entry键可以将这两个&快捷转义,这样这句语句变成下面这样:

android:text="@{String.valueOf(boolean1 &amp;&amp; boolean2)}"

然后我们再给boolean1和boolean2赋值:

mainBinding.setBoolean1(true);
mainBinding.setBoolean2(false);

可以看到TextView上显示了false,说明逻辑运算符在DataBinding中是可以使用的。

4、一元运算符

常见的一元运算符有正号+、负号-、非!、位非~等,这里我们用非来做一个演示:

<TextView
    android:id="@+id/tv_4"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@{String.valueOf(!boolean2)}"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@id/tv_3" />

这里我们直接用之前声明的boolean2做个演示,boolean2的值是false,!boolean2就应该是true,而我们运行起来后看到的也是true,这就是我们DataBinding中一元运算符的使用方式。

5、二元运算符

我们常用的二元运算符:与&、或I、异或^在DataBinding中也都是可用的,这里我们用异或^来举个例子,还是用之前声明的boolean1和boolean2来试试:

<TextView
    android:id="@+id/tv_5"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@{String.valueOf(boolean1 ^ boolean2)}"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@id/tv_4" />

由于我们给boolean1和boolean2分别赋值了不同的值,所以这个表达式的结果应该是true,我们运行起来发现显示的结果和预期一致。

6、三元运算符

在实际开发中,三元运算符也是我们常常要用到的,这里我们用已有的boolean2、str1、str2来测试一下这个运算符:

<TextView
    android:id="@+id/tv_6"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@{boolean2?str1:str2}"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@id/tv_5" />

这里我们的boolean2为false,所以TextView的内容应该显示str2的值,我们运行起来发现显示了“bbb”,正是我们给str2赋的值。

7、移位运算符

左移运算符<<、右移运算符>>、无符号右移运算符>>>在我们的开发中并不常用,不熟悉的朋友们可以先搜索一下相关介绍,这里我们用一个简单的例子来看看这些运算符在DataBinding中的运用,我们知道3<<2结果是12,这里我们用一个TextView来显示一下:

<TextView
    android:id="@+id/tv_7"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@{String.valueOf(3 << 2)}"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@id/tv_6" />

和&一样,<符号在DataBinding表达式中也是不能直接用的,我们点击option+entry键并把两个<转义得到下面的语句:

android:text="@{String.valueOf(3 &lt;&lt; 2)}"

这样我们运行起来,发现和预期一样显示了12。

8、比较运算符

比较运算符> < = >= <= ==不用多介绍了吧?我们直接用>来演示一下:

<TextView
    android:id="@+id/tv_8"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@{String.valueOf(num1 > num2)}"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@id/tv_7" />

这里我们的num1数值为123,num2数值为234,显然num1 > num2是不成立的,运行起来后如预期一样显示了false。

9、空合并运算符

这个运算符是DataBinding特有的写法,参数1 ?? 参数2 ?? 参数3 。。。这样的写法DataBinding自动从前往后选取第一个非空参数使用,下面我们再声明三个字符串来测试这个运算符:

<variable
    name="str3"
    type="String" />

<variable
    name="str4"
    type="String" />

<variable
    name="str5"
    type="String" />

。。。

<TextView
    android:id="@+id/tv_9"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@{str3 ?? str4 ?? str5}"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@id/tv_8" />

然后我们跳过str3、str4直接给str5赋值:

mainBinding.setStr5("ccc");

运行起来后发现TextView上显示了str5的内容“ccc”。

下章预告

这一章里我们了解并测试了DataBinding中的运算符,有关DataBinding的内容剩下的已经不多了。DataBinding是Android MVVM相关的四大组件中最复杂的一个,因此学习这部分内容花费了我们相当大的篇幅,但是我相信全面的了解这一组件对我们使用MVVM高效开发很有帮助。下一章是我们DataBinding详解的最后一章,我们会学习DataBinding剩下的知识和技巧,如自定义属性和Lambda表达式等。

参考文档:

CSDN:Android DataBinding 运算符、BindingAdapter、 BindingConversion --xiaow

CSDN:Android 安卓DataBinding(九)·运算符 --第三女神程忆难

CSDN:Android DataBinding的基本使用 -- 尹中文

CSDN:Android DataBinding 从入门到进阶,看这一篇就够 -- 程序员一东

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值