美文网首页
Android端MVVM从入门到实战(第四篇) - DataBi

Android端MVVM从入门到实战(第四篇) - DataBi

作者: Android小郭 | 来源:发表于2023-03-27 14:56 被阅读0次

    前言

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

    参考代码地址:https://github.com/guoergongzi/GMVVMDemo/tree/main

    参考代码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 从入门到进阶,看这一篇就够 -- 程序员一东

    相关文章

      网友评论

          本文标题:Android端MVVM从入门到实战(第四篇) - DataBi

          本文链接:https://www.haomeiwen.com/subject/jldzrdtx.html