Android端MVVM從入門到實戰(zhàn)(第四篇) - DataBinding運(yùn)算符

前言

之前的文章中我們了解了DataBinding的基礎(chǔ)用法和數(shù)據(jù)綁定,這一章我們來了解一下DataBinding中的運(yùn)算符,以便我們在實戰(zhàn)中能熟練的運(yùn)用這些運(yùn)算符方便我們的開發(fā)。

參考代碼地址:https://github.com/guoergongzi/GMVVMDemo/tree/main

參考代碼Module:gdatabindingdemo3

1、算術(shù)運(yùn)算符

說到運(yùn)算,四則運(yùn)算一定是我們首先想到的。加法運(yùn)算+、減法運(yùn)算-、懲罰運(yùn)算*、除法運(yùn)算/、求余運(yùn)算%五種運(yùn)算,我們只以加法運(yùn)算做一個示范。首先我們準(zhǔn)備在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);

運(yùn)行代碼,發(fā)現(xiàn)顯示在界面上的正是123+234的結(jié)果357,這就是DataBinding中四則運(yùn)算的寫法。

2、字符串合并

眾所周知,java中字符串合并操作也是通過操作符+來實現(xiàn)的,那么在DataBinding中是不是也是這樣呢?我們在activity_main中準(zhǔn)備兩個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");

運(yùn)行后TextView顯示aaabbb,說明我們的猜測是正確的,DataBinding中也可以用+符號來實現(xiàn)字符串合并操作。

3、邏輯運(yùn)算符

在開發(fā)中,我們應(yīng)該對邏輯運(yùn)算符&&和||不陌生,但是我們把它用在DataBinding時要注意一個細(xì)節(jié),DataBinding的表達(dá)式中不支持直接使用&和|這兩個字符,因此我們對這兩個字符進(jìn)行一下轉(zhuǎn)義。首先我們準(zhǔn)備一下xml文件內(nèi)容:

<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中這里應(yīng)該是變紅的,這時候mac按下option+entry鍵可以將這兩個&快捷轉(zhuǎn)義,這樣這句語句變成下面這樣:

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

然后我們再給boolean1和boolean2賦值:

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

可以看到TextView上顯示了false,說明邏輯運(yùn)算符在DataBinding中是可以使用的。

4、一元運(yùn)算符

常見的一元運(yùn)算符有正號+、負(fù)號-、非!、位非~等,這里我們用非來做一個演示:

<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就應(yīng)該是true,而我們運(yùn)行起來后看到的也是true,這就是我們DataBinding中一元運(yùn)算符的使用方式。

5、二元運(yùn)算符

我們常用的二元運(yùn)算符:與&、或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分別賦值了不同的值,所以這個表達(dá)式的結(jié)果應(yīng)該是true,我們運(yùn)行起來發(fā)現(xiàn)顯示的結(jié)果和預(yù)期一致。

6、三元運(yùn)算符

在實際開發(fā)中,三元運(yùn)算符也是我們常常要用到的,這里我們用已有的boolean2、str1、str2來測試一下這個運(yùn)算符:

<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的內(nèi)容應(yīng)該顯示str2的值,我們運(yùn)行起來發(fā)現(xiàn)顯示了“bbb”,正是我們給str2賦的值。

7、移位運(yùn)算符

左移運(yùn)算符<<、右移運(yùn)算符>>、無符號右移運(yùn)算符>>>在我們的開發(fā)中并不常用,不熟悉的朋友們可以先搜索一下相關(guān)介紹,這里我們用一個簡單的例子來看看這些運(yùn)算符在DataBinding中的運(yùn)用,我們知道3<<2結(jié)果是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表達(dá)式中也是不能直接用的,我們點擊option+entry鍵并把兩個<轉(zhuǎn)義得到下面的語句:

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

這樣我們運(yùn)行起來,發(fā)現(xiàn)和預(yù)期一樣顯示了12。

8、比較運(yùn)算符

比較運(yùn)算符> < = >= <= ==不用多介紹了吧?我們直接用>來演示一下:

<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數(shù)值為123,num2數(shù)值為234,顯然num1 > num2是不成立的,運(yùn)行起來后如預(yù)期一樣顯示了false。

9、空合并運(yùn)算符

這個運(yùn)算符是DataBinding特有的寫法,參數(shù)1 ?? 參數(shù)2 ?? 參數(shù)3 。。。這樣的寫法DataBinding自動從前往后選取第一個非空參數(shù)使用,下面我們再聲明三個字符串來測試這個運(yùn)算符:

<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");

運(yùn)行起來后發(fā)現(xiàn)TextView上顯示了str5的內(nèi)容“ccc”。

下章預(yù)告

這一章里我們了解并測試了DataBinding中的運(yùn)算符,有關(guān)DataBinding的內(nèi)容剩下的已經(jīng)不多了。DataBinding是Android MVVM相關(guān)的四大組件中最復(fù)雜的一個,因此學(xué)習(xí)這部分內(nèi)容花費(fèi)了我們相當(dāng)大的篇幅,但是我相信全面的了解這一組件對我們使用MVVM高效開發(fā)很有幫助。下一章是我們DataBinding詳解的最后一章,我們會學(xué)習(xí)DataBinding剩下的知識和技巧,如自定義屬性和Lambda表達(dá)式等。

參考文檔:

CSDN:Android DataBinding 運(yùn)算符、BindingAdapter、 BindingConversion --xiaow

CSDN:Android 安卓DataBinding(九)·運(yùn)算符 --第三女神程憶難

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

CSDN:Android DataBinding 從入門到進(jìn)階,看這一篇就夠 -- 程序員一東

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容