java - 使用自定义绑定适配器绑定可绘制资源
问题描述
我正在尝试在视图模型和 UI 中的对象的两个属性之间建立数据绑定。
该对象具有两个属性name
,iconName
我可以通过视图模型中的 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
}
}
解决方案
如果有的话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);
}
推荐阅读
- angular - 使用 Angular 和 nginx 我收到错误 Uncaught TypeError: Super expression must be null or a function
- azure-cosmosdb - Gremlin 查询以在同一响应中检索计数和数据
- c# - C# MySQL 无法连接到 ubuntu 服务器
- wordpress - 如何在 WooCommerce 中向用户提供运输方式选择?
- dictionary - Ansible - 如何将字典提供给字典类型的模块参数?
- origen-sdk - 有没有办法通过“origen rc tag”命令指定使用标签与版本?
- spring-boot - 使用 Spring Social 的 Twitter 自定义登录页面
- c++ - 变量在循环中显示但不在循环中
- php - Laravel 的关系返回不准确的结果
- java - 将 100 万条记录从 XLS 文件写入 Java 中的 CVS 文件