首页 > 其他分享 >DataBinding运算符

DataBinding运算符

时间:2023-06-19 11:31:45浏览次数:42  
标签:运算 boolean2 运算符 mainBinding DataBinding 我们


前言

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 && 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 << 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”。

标签:运算,boolean2,运算符,mainBinding,DataBinding,我们
From: https://blog.51cto.com/u_16163442/6512068

相关文章

  • 基础语法2运算符
    基础语法2运算符Java运算符可以分为以下几种类型:算术运算符:用于执行数学运算,如+、*、/、%(取余)等。关系运算符:用于比较两个值的大小或相等性,如==、!=、>、<、>=、<=等。逻辑运算符:用于判断两个或多个条件的真假,如&&、||、!等。位运算符:用于对整数类型的二进制位进行操作,如&......
  • 前端学习C语言 - 第二篇(常量、运算符、控制和循环)
    常量、运算符、控制和循环前文我们写了第一个c语言程序,了解了基本的数据类型。本篇将继续学习:常量、运算符、控制语句和循环语句。常量#define常量#define是用来定义常量和宏的预处理指令。定义常量的一般形式:#define常量名常量值。就像这样:#defineMAX_NUM100//定义整型......
  • 运算符重载知识点总结
    #运算符重载在数学上,两个复数可以直接进行+、-等运算。但在C++中,直接将+或-用于复数对象是不允许的。•有时会希望,让对象也能通过运算符进行运算。这样代码更简洁,容易理解。•例如:complex_a和complex_b是两个复数对象;求两个复数的和,希望能直接写:complex_a+complex_b在数学上......
  • Vue全局过滤器的使用以及在template三元运算符中内使用过滤
    新建filters.js如下,内容过滤可以自己写函数,记得export导出importdayjsfrom"dayjs";//转小写letlower=value=>value.toLowerCase();//转大写letupper=value=>value.toUpperCase();letcurrencyStyle=(value,style)=>{//货币格式/***sty......
  • C++面试八股文:在C++中,你知道哪些运算符?
    C++面试八股文:在C++中,你知道哪些运算符?某日二师兄参加XXX科技公司的C++工程师开发岗位第11面:面试官:在C++中,你都知道都哪些运算符?二师兄:啥?运算符?+-*/=这些算吗?面试官:嗯,还有其他的吗?二师兄:当然还有,+=,-=,*=,/=,==,还有逻辑运算,位运算等。面试官:好的。那你知道这些运算......
  • C++ 深入理解const_cast转换运算符
    const_cast转换运算符我们在RTTI和类型转换运算符中详细介绍过它的用法和使用场景,今天我们对其进一步了解一下。首先我们回忆一下它的作用和用法。const_cast的基本使用const_cast运算符用于执行只有一种用途的类型转化,即改变const或volatile。用法如下:const_cast<type_name>......
  • C++ 中的运算符重载
     您可以重定义或重载大部分C++内置的运算符。这样,您就能使用自定义类型的运算符。重载的运算符是带有特殊名称的函数,函数名是由关键字operator和其后要重载的运算符符号构成的。与其他函数一样,重载运算符有一个返回类型和一个参数列表。https://www.tzffs.com/lnzt15/......
  • VBA运算符
    VBA运算符可以分为以下6类:赋值运算符算术运算符关系运算符逻辑运算符连接运算符其他运算符 原文:https://www.lanrenexcel.com/vba-operators/......
  • Pandas中执行元素级的逻辑运算符使用“&”、“|”、“~”,而不是“and”、“or”、“no
    目录1.两种运算符工作方式不同2.举例对比1.两种运算符工作方式不同在Python中,and和&是两个不同的运算符,它们的工作方式有所不同。and是Python的内置逻辑运算符,它是用来连接两个逻辑表达式的。当and两边的表达式都为True时,整个逻辑表达式的结果才为True。例如,TrueandTrue结......
  • C++ 运算符重载讲解与经典实例
    C++中预定义的运算符的操作对象只能是基本数据类型,实际上,对于很多用户自定义类型,也需要有类似的运算操作。例如: classcomplex{public:complex(doubler=0.0,doubleI=0.0){real=r;imag=I;}voiddisplay();private:doublereal;doubleimag;};comple......