2016-02-10 2 views
5

Ich war auf Android Arbeitsdatenbindung und kam in dem Szenario, das wir ein Modell mit zwei Arten einstellen:Android Was ist der Unterschied zwischen setVariable (BR.xyz, Modell) und databinding.setXYZ (Modell)

User user = new User("User", "Abc"); // this is a model 
dataBinding.setVariable(BR.user, user); 
dataBinding.executePendingBindings(); // and we have to do this... Why? 

und wir können auch festlegen, wie:

binding.setUser(user); 

kann mir jemand erklären, was diese den Unterschied zwischen diesen beiden?

Benutzermodell:

public class User{ 
public String fName; 
public String lName; 

public User(String fName, String lName){ 
this.fName = fName; 
this.lName = lName; 
    } 
} 

Antwort

6

Sie tun das Gleiche. Laut the docs kann manchmal der Typ der Variablen nicht bestimmt werden, so dass Sie die Methode setVariable() verwenden müssen. Unter normalen Umständen wird die Methode setX() generiert. Sie sind besser dran mit den generierten Methoden.

3

den Fall betrachten, wenn Sie eine abstrakte Klasse, die kein gemeinsames Bindungs ​​Layout nicht teilt (außer natürlich die Super ViewDataBinding das alle verbindlich Layouts erben von):

public abstract classs EditorActivityFragment<T extends ViewDataBinding> { 

In dieser Klasse onCreateView() Sie wird keine generierten Methoden der Lage sein, zu verwenden, um Ihre Variable auf die Bindung zu setzen, so gibt es keine gemeinsame übergeordnete Klasse neben dem ViewDataBinding, damit Sie Reflektion verwenden gezwungen werden, oder Sie können die bequeme Methode setVariable() verwenden:

binding.setVariable(BR.viewModel,myViewModel); 

Ich hoffe, dass hilft, den Anwendungsfall für diese Methode besser zu erklären.

Verwandte Themen