Android 筆記 - Data Binding 搭配 picasso 使用
找了很多教學都只有貼程式碼,但沒看到解說之類的,所以就來用我的淺見寫篇文章騙騙小孩子。
Code
CustomViewModel
- 依照你的狀況照常設定變數
- Uri 為空時將變數設定為
Uri.EMPTY
1 | var photoUrl = MutableLiveData<Uri>() |
ImageBindingAdapter
- 須為 object,非 class
- 使用
@JvmStatic
及@BindingAdapter("")
1
2
3
4
5
6
7
8
9
10object ImageBindingAdapter {
fun setImageUrl(view: ImageView, url: Uri, notSignedIn: Drawable) {
Picasso.get()
.load(url)
.error(notSignedIn)
.into(view)
}
}
fragment.xml
<data>
標籤中僅需 ViewModel 即可,不用ImageBindingAdapter
- 使用
app:CUSTOM_ATTR_HERE
來使用自訂的 Setter1
2
3
4<ImageView
...
app:imageUrl="@{viewModel.photoUrl}"
app:error="@{@drawable/ic_launcher}">
運作流程
因為在 ImageBindingAdapter
裡面使用 BindingAdapter
指定了 xml 中的屬性,所以
- xml 中監聽到
ViewModel
中的變化時 - 呼叫
ImageBindingAdapter
中定義BindingAdapter
的 Function - 傳入 xml 中自定義的
@{viewModel.photoUrl}
數值 - 執行 Function 內容,也就是使用 Picasso 將傳過來的
@{viewModel.photoUrl}
載入 ImageView
大 guy 是這樣。