为什么BindingAdapter必须是静态方法?

jbo*_*ana 5 java data-binding android static-methods android-databinding

我只是学习如何在Android上使用数据绑定.我想问为什么BindingAdapter必须设置为静态方法?如果我可以使它成为非静态方法.我该怎么办?我需要将我的图像加载到我自己的ImageLoader对象中.

Geo*_*unt 16

该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);
    }
}
Run Code Online (Sandbox Code Playgroud)

首先,无论何种类包含实例,BindingAdapter都必须作为DataBindingComponent的方法提供.它是您实现的生成的接口,该方法基于类的名称:

public class MyComponent implements DataBindingComponent {
    @Override
    public ImageBindingAdapters getImageBindingAdapters() {
        //... whatever you do to create or retrieve the instance
        return imageBindingAdapter;
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,您必须在绑定期间提供组件.例如:

@Override
public void onCreate(Bundle icicle) {
    super.onCreate(icicle);
    MyBinding binding = DataBindingUtil.setContentView(this,
            R.layout.my, new MyComponent());
    binding.setData(/* whatever */);
}
Run Code Online (Sandbox Code Playgroud)

因此,如果您使用依赖注入,则主要使用它.DataBindingUtil.setDefaultComponent()如果您不需要为每个绑定更改组件,也可以使用.