为什么 BindingAdapter 必须是静态方法?
Why BindingAdapter must be static method?
我刚刚学习如何在 Android 上使用数据绑定。还有我想问为什么BindingAdapter一定要设置成静态方法?如果我能让它成为非静态方法。我必须做什么?我需要将我的图像加载到我自己的 ImageLoader 对象中。
BindingAdapter 不需要 是静态的。如果它是静态的,使用起来会容易得多。如果必须使用实例方法,则可以,但必须提供一种通过 DataBindingComponent 访问实例的方法。
假设您有一个 BindingAdapter 实例:
public class ImageBindingAdapters {
private ImageLoader imageLoader;
public ImageBindingAdapters(ImageLoader imageLoader) {
this.imageLoader = imageLoader;
}
@BindingAdapter("url")
public void setImageUrl(ImageView imageView, String url) {
imageLoader.loadInto(imageView, url);
}
}
首先,任何包含实例 BindingAdapter 的 class 都必须作为 DataBindingComponent 的方法提供。它是您实现的生成接口,该方法基于 class:
的名称
public class MyComponent implements DataBindingComponent {
@Override
public ImageBindingAdapters getImageBindingAdapters() {
//... whatever you do to create or retrieve the instance
return imageBindingAdapter;
}
}
现在,您必须在绑定期间提供组件。例如:
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
MyBinding binding = DataBindingUtil.setContentView(this,
R.layout.my, new MyComponent());
binding.setData(/* whatever */);
}
所以,如果你使用依赖注入,它主要被使用。如果不需要为每个绑定更改组件,也可以使用 DataBindingUtil.setDefaultComponent()
。
我刚刚学习如何在 Android 上使用数据绑定。还有我想问为什么BindingAdapter一定要设置成静态方法?如果我能让它成为非静态方法。我必须做什么?我需要将我的图像加载到我自己的 ImageLoader 对象中。
BindingAdapter 不需要 是静态的。如果它是静态的,使用起来会容易得多。如果必须使用实例方法,则可以,但必须提供一种通过 DataBindingComponent 访问实例的方法。
假设您有一个 BindingAdapter 实例:
public class ImageBindingAdapters {
private ImageLoader imageLoader;
public ImageBindingAdapters(ImageLoader imageLoader) {
this.imageLoader = imageLoader;
}
@BindingAdapter("url")
public void setImageUrl(ImageView imageView, String url) {
imageLoader.loadInto(imageView, url);
}
}
首先,任何包含实例 BindingAdapter 的 class 都必须作为 DataBindingComponent 的方法提供。它是您实现的生成接口,该方法基于 class:
的名称public class MyComponent implements DataBindingComponent {
@Override
public ImageBindingAdapters getImageBindingAdapters() {
//... whatever you do to create or retrieve the instance
return imageBindingAdapter;
}
}
现在,您必须在绑定期间提供组件。例如:
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
MyBinding binding = DataBindingUtil.setContentView(this,
R.layout.my, new MyComponent());
binding.setData(/* whatever */);
}
所以,如果你使用依赖注入,它主要被使用。如果不需要为每个绑定更改组件,也可以使用 DataBindingUtil.setDefaultComponent()
。