답변

8

BindingAdapter에 이 없으므로이 정적입니다. 정적 인 경우 작업하는 것이 훨씬 쉽습니다. 인스턴스 메서드를 사용해야하는 경우에는 가능하지만 DataBindingComponent를 통해 인스턴스에 도달 할 수있는 방법을 제공해야합니다.

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이 DataBindingComponent의 방법으로 제공해야하는 인스턴스를 포함하는 어떤 클래스 :

은의 당신이 인스턴스 BindingAdapter가 1 개 있다고 가정 해 보겠습니다. 그것은 당신이 구현 생성 된 인터페이스와 메소드는 클래스의 이름을 기반으로합니다

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()을 사용할 수도 있습니다.