Databinding中ImageView的用法和坑(Java和Kotlin),附帶Glide用法

Databinding相信開發過Android的人肯定不陌生,極大的簡化了代碼量,而且易於維護,不過中間的坑也是很多的,尤其是對於很多新手來說,如果用錯了,簡直可以用“一臉懵逼”來形容,因爲databinding根本不會告訴你xml中的錯誤錯在哪,不過studio3.4之後貌似有了錯誤的提示,比如哪個參數沒找到之類的,不過還是沒有像普通的代碼一樣能夠直接提示到第幾行。。。

TextView的用法很簡單,只要把需要的String字符串傳入就行,但是ImageView就不是這樣了,用法有着很明顯的不同。尤其是Kotlin和Databinding的結合,更是坑不少,下面我簡單講下Java和Kotlin中的ImageView和Databinding的用法:

一、Java:

    @BindingAdapter({"app:imgUrl"})
    public static void getTransImageView(ImageView imageView,  int res) {
        imageView.setImageResource(res);
    }

      
 <ImageView
            android:layout_width="40dp"
            android:layout_height="40dp"
            app:imgUrl="@{bean.res}"
            />

1、如上面的代碼這樣,很簡單,寫一個靜態方法,重點就是這個 @BindingAdapter 註解,ImageView本身無法直接在xml中使用android:src 屬性來動態改變圖片的屬性,需要額外使用註解和對應的方法名稱,其中app:imgUrl 這個是自定義的方法名稱,也可以寫成aa:imgUrl,或者aa:bb等等,但是千萬不要寫android:imgUrl !!!因爲android是系統的方法,會報錯,顯示方法未找到!!!
2、裏面的參數可以自定義,但是一定要有ImageView的參數,而且不需要傳入任何ImageView對象,因爲這個是本身
3、在xml中,直接使用剛剛自定義的方法app:imgUrl="@{bean.res}",大功告成

二、Kotlin

        @BindingAdapter("app:imgUrl")
        @JvmStatic
        fun load(imageView: ImageView, res: Int) {
          imageView.setImageResource(res);
        }

1、Kotlin的註解略微不同,如果小夥伴照搬Java,就會報錯,仔細觀察,你會發現裏面少了一個 {}
2、並且Kotlin使用靜態方法,一定要額外加@JvmStatic 註解,因爲Kotlin實際上是沒有靜態方法的,雖然Object類和companion object 方法美其名曰靜態,但不是真實的靜態,和java還是有區別的,只能叫做形式上的靜態
3.xml中的使用和java一樣,無區別

PS:如果小夥伴需要使用Glide結合Databinding怎麼辦呢?
直接獲得view的context傳入即可,Java也一樣

        @BindingAdapter("app:imgUrl")
        @JvmStatic
        fun load(view: ImageView, url: String) {
            Glide.with(view.context).load(url).into(view)
        }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章