android data binding jetpack VIII BindingConversion

android data binding jetpack VIII BindingConversionhtml

android data binding jetpack VII @BindingAdapterandroid

android data binding jetpack V 實現recyclerview 綁定源碼分析

android data binding jetpack IV 綁定一個方法另外一種寫法和參數傳遞post

android data binding jetpack III 綁定一個方法this

android data binding jetpack II 動態數據更新spa

android data binding jetpack I 環境配置 model-view 簡單綁定.net

 

 

@BindingConversioncode

綁定轉換orm

意思是view某個屬性須要一個值,但數據所提供的值跟這個需求有區別。xml

好比:background 須要drawable,但用戶提供的是color int值或者是"#FFFFFF"這樣的字符竄,那就不能知足了。須要轉換一下。

@BindingConversion是用來知足這樣的需求的,把「#FFFFFF」轉成drawable

用法:

1.在任何一個類裏面編寫方法,使用@BindingConversion註解。這個與以前的bindingadapter一個用法。很難理解爲何這麼作,以後再去看源碼分析。

2.主法名隨便起,叫啥都行。好比 intToDrawable

3.方法必須爲公共靜態(public static)方法,且有且只能有1個參數

4.重點:方法做用在什麼地方的決定因素是:參數類型和返回值類型。兩個一致系統自動匹配。

5.轉換僅僅發生在setter級別,所以它是不容許如下混合類型:

<View android:background="@{isError ? @drawable/error : @color/white}" android:layout_width="wrap_content" android:layout_height="wrap_content"/>

例子:
    /**
     * 將字符串顏色值轉化爲ColorDrawable
     * 隨例放哪一個類裏都行。隨便叫啥都行。
     * @param colorString 如:#ff0000
     * @return
     */
    @BindingConversion
    public static ColorDrawable convertColorStringToDrawable(String colorString) {
        int color = Color.parseColor(colorString);
        return new ColorDrawable(color);
    }
    
  咱們在提供數據的類裏定義以下:
   private String color; public String getColor() { return color; }
  在V裏綁定時使用他。     
<TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginLeft="20dp" android:background="@{student.color}" android:gravity="center" android:text="@{student.name}" android:textSize="18sp" />

 

效果:

 

有文章說慎重使用text轉int。

使用注意
慎用convertStringToInt:

@BindingConversion
public static int convertStringToInt(String value)
{
int ret;
try {
ret = Integer.parseInt(value);
}
catch (NumberFormatException e)
{
ret = 0;
}
return ret;
}

若是使用databinding的android:text賦值是string類型,會被轉換爲int類型:

<variable
name="str"
type="String"/>
……………
<TextView
android:id="@+id/id_chute_group_one_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{str}" />

this.idTxt.setText(com.biyou.databinding.Converters.convertStringToInt(str));

運行的時候會報錯:

android.content.res.Resources$NotFoundException: String resource ID #0x0
---------------------
做者:逆風Lee
來源:CSDN
原文:https://blog.csdn.net/lixpjita39/article/details/79049872
版權聲明:本文爲博主原創文章,轉載請附上博文連接!

 

這個錯誤的緣由是:正好TextView 有setText(int)方法,int 是RES資源。很好理解。

重點 重點 重點:方法做用在什麼地方的決定因素是:參數類型和返回值類型。兩個一致系統自動匹配。

 

總結前面兩個知識點。

當數據和V的屬性不匹配的時候能夠有兩個作法:

1.定義一個轉換方法,使用bindingAdapter 起一個新的屬性,在方法裏對V進行操做。

2.使用BindingConversion轉換成對應的資源類型。也就是本文。

相關文章
相關標籤/搜索