[英]Using custom binding adapter to bind drawable resource
我正在嘗試在視圖模型和UI中的對象的兩個屬性之間建立數據綁定。
該對象具有兩個屬性name
和iconName
,我可以通過視圖模型中的Getter- / Setter-Methods訪問。
name
屬性是一個簡單的String
字段,綁定到EditText組件。
但是, iconName
屬性是位於drawable
目錄中的XML文件的資源名稱 ,應該將其綁定為ImageView組件的源。
手動更改ImageView組件的來源就像調用一樣容易:
int resId = getResources().getIdentifier(iconName, "drawable", getPackageName());
selectedIconView.setImageResource(resId);
在Activity類中。
但是現在我不確定如何在綁定適配器內提取資源ID以更新ImageView,因為我的綁定適配器內似乎沒有上下文。
public class SubjectAdapter {
@BindingAdapter("app:subjectName")
public static void setSubjectName(EditText view, SubjectEntity subject) {
view.setText(subject.getName());
}
@BindingAdapter("app:srcCompat")
public static void setSubjectIcon(ImageView view, SubjectEntity subject) {
String iconName = subject.getIconName();
// TODO: Set Image Resource of view
}
}
如果您有任何View
,則獲取Context
就像在視圖上調用getContext()
一樣容易。
@BindingAdapter("app:srcCompat")
public static void setSubjectIcon(ImageView view, SubjectEntity subject) {
String iconName = subject.getIconName();
Context context = view.getContext();
String packageName = context.getPackageName();
int resId = context.getResources().getIdentifier(iconName, "drawable", packageName);
view.setImageResource(resId);
}
讓您的適配器功能接收該值(資源ID):
class MyViewModel : ViewModel() {
companion object {
@BindingAdapter("app:srcCompat")
@JvmStatic
fun setImageViewResource(imageView: ImageView, resource: Int) {
imageView.setImageResource(resource)
}
}
}
該代碼從生成的類中調用,因此不必一定要在您的viewmodel中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.