首页 > 解决方案 > 使用自定义绑定适配器绑定可绘制资源

问题描述

我正在尝试在视图模型和 UI 中的对象的两个属性之间建立数据绑定。

该对象具有两个属性nameiconName我可以通过视图模型中的 Getter-/Setter-Methods 访问它们。

name属性是一个String绑定到 EditText 组件的简单字段。

iconName但是,该属性是位于目录中的 XML 文件的资源名称drawable,该目录应该被绑定为 ImageView 组件的源。

手动更改 ImageView 组件的来源就像调用一样简单:

int resId = getResources().getIdentifier(iconName, "drawable", getPackageName());
selectedIconView.setImageResource(resId);

在 Activity 类中。

但是现在我不确定如何在 Binding Adapter 中提取资源 ID 来更新 ImageView,因为我的 Binding Adapter 中似乎没有上下文。

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
    }
}

标签: javaandroidandroid-databinding

解决方案


如果有的话View,获得 aContext就像调用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);
}

推荐阅读