一些databinding 賦值小技巧

①dataBinding在xml文件是支持import,可以導入java支持的包,所以也就可以進行簡單的運算,比如上面的xml中就用了三元運算符
動態設置顏色

android:textColor="@{user.vip? 0xffff0000:0xff000000}"

當導入的用戶是vip的時候,文本顏色會設置爲紅色,當不是vip的時候會顯示黑色

②而且支持java的字符串拼接

android:text="@{user.nickName + `(` + user.name +`)`}"

細心的網友肯定會發現,這個字符串拼接的時候用到的裏面不是單引號‘,而是一個數字鍵1左邊那個鍵`。

其中在dataBinding的xml文件中,是不支持雙引號中加單引號的,但是支持單引號中加雙引號,在雙引號中可以加`;

也可以把字符寫到String 文件中,賦值這樣寫

android:text="@{user.nickName + `@string/aa`}"
注意是@string 

③細心的網友還會發現xml中有這樣一句話

android:text="@{user.nickName ?? user.name}"

這裏用了雙冒號??代表的意思是,如果user.nickName爲空,則顯示user.name,如果不爲空,則顯示nickName;

其中這句話等於  user.nickName == null ? user.name : user.nickName;

④既然這是xml佈局,大家肯定知道在xml中是不允許用<>的,用的話會被默認是標籤,那麼如果一定要用<>做比較表達式呢,這裏可以使用轉義來解決。

代碼中有這樣一句話:

android:textColor="@{user.level &lt; 3 ? 0xff03bbf9 : 0xfff60bdb }
其中的< 代表的就是小於符號<,意思是如果用於等級小於3,則郵箱文本爲藍色,否則文本爲紫色。

⑤而我們實際運用中肯定也會有很多的點擊事件,那麼如何實現點擊事件的呢?

這就是我們爲什麼在dataBean實體類User中添加了兩個方法的原因

public void clickName(View view){
        Toast.makeText(view.getContext(),"點擊了用戶名",Toast.LENGTH_SHORT).show();
    }

這兩個方法其實不一定寫在實體類中,其實寫在其他類中也是可以的,不過我更推薦寫在實體類中,因爲觸發事件的時候,很有可能會用到實體類的其他屬性,寫在這裏面調用起來就變得比較輕鬆了。

然後再把事件和xml中綁定在一起

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="25sp"
android:onClick="@{user.clickName}"
android:textColor="@{user.vip? 0xffff0000:0xff000000}"
android:text="@{user.nickName + `(` + user.name +`)`}"/>

這個中間有onClick和onLongClick用於綁定。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章