Ich lerne gerade, Datenbindung auf Android zu verwenden. Und ich möchte fragen, warum BindingAdapter auf statische Methode gesetzt werden muss? Wenn ich es nicht-statische Methode machen kann. Was muss ich machen? Ich muss mein Bild in mein eigenes ImageLoader-Objekt laden.Warum muss BindingAdapter statische Methode sein?
Antwort
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.
- 1. Warum muss eine ClassInitialize-Methode statisch sein?
- 2. Warum Delegat muss statisch sein?
- 3. Warum muss conexpr statisch sein?
- 4. Warum muss "erwarten" in einer "asynchronen" Methode sein?
- 5. BindingAdapter-Verwarnungswarnungen
- 6. Warum muss mein "Marshaller" "statisch" sein?
- 7. java.io.IOException: WebSocket-Methode muss ein GET sein
- 8. Warum muss der Löschoperator statisch sein?
- 9. Warum muss Mocha in devDependencies sein?
- 10. Warum muss dieser tf.placeholder ein float sein?
- 11. Warum muss der Kopierkonstruktor const sein?
- 12. Muss Fassadenklasse im Fassadenmuster statisch sein?
- 13. Warum statische Methode in einer Klasse nicht Null-Zeiger-Ausnahme geben, wenn sein Objekt null ist
- 14. @ApplicationScoped muss serialisierbar sein?
- 15. Warum ist JavaMail Transport.send() eine statische Methode?
- 16. Android BindingAdapter error.NonExistentClass
- 17. Warum muss der Sendertyp einer IBAction ID sein?
- 18. Warum kann die private Methode endgültig sein?
- 19. statische Methode kann Interface-Methode nicht implementieren, warum?
- 20. FileNameSizeDelimiteC muss konstant sein
- 21. Muss MongoCollection.forEach threadsicher sein?
- 22. Adjazenzmatrix muss symmetrisch sein
- 23. allow_url_open muss auf sein
- 24. Struct.Error, muss ein Byteobjekt sein?
- 25. Rhino Mock Partial Stub muss eine öffentliche Methode sein?
- 26. Statische und nicht statische Methode
- 27. Warum .Net WPF DependencyProperties müssen statische Mitglieder der Klasse sein
- 28. Warum bekomme ich "Fehler: ... muss ein Referenztyp sein" in meiner C# generischen Methode?
- 29. Warum wirft Fabric "TypeError: argument muss ein int sein, oder haben Sie eine fileno() Methode"?
- 30. Warum muss ein + oder - innerhalb der Calc() - Methode mit Leerzeichen umgeben sein?