Antwort

8

Der BindingAdapter muss nicht statisch sein. Es ist einfach viel einfacher zu arbeiten, wenn es statisch ist. Wenn Sie eine Instanzmethode verwenden müssen, können Sie dies tun, aber Sie müssen eine Möglichkeit bereitstellen, damit die Instanz über die DataBindingComponent erreicht wird.

Lasst uns vorstellen, dass Sie eine Instanz BindingAdapter haben:

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

Erste, was auch immer Klasse der Instanz enthält BindingAdapter als Methode des DataBindingComponent zur Verfügung gestellt werden müssen. Es ist eine generierte Schnittstelle, die Sie implementieren und das Verfahren auf den Namen der Klasse basiert:

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

nun die Komponente während der Bindung zur Verfügung stellen müssen. Zum Beispiel:

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

So ist es vor allem, wenn Sie Dependency Injection verwenden verwendet. Sie können auch DataBindingUtil.setDefaultComponent() verwenden, wenn Sie die Komponente nicht für jede Bindung ändern müssen.

Verwandte Themen