2016-02-10 21 views
5

stavo lavorando su Android di associazione dati e sono imbattuto lo scenario che possiamo impostare un modello con due modi seguenti:Android Qual è la differenza tra setVariable (BR.xyz, modello) e databinding.setXYZ (modello)

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

e possiamo anche impostare come:

binding.setUser(user); 

qualcuno può spiegare questo ciò che la differenza tra questi due?

Modello utente:

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

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

risposta

6

che fanno la stessa cosa. Secondo the docs, a volte il tipo di variabile non può essere determinato, quindi sarà necessario utilizzare il metodo setVariable(). In circostanze normali, verranno generati i metodi setX(). Stai meglio usando i metodi generati.

3

Si consideri il caso in cui si dispone di una classe astratta che non condivide un layout di legame comune (ad eccezione, naturalmente, la superclasse ViewDataBinding che tutti i layout vincolanti ereditano da):

public abstract classs EditorActivityFragment<T extends ViewDataBinding> { 

In questa classe onCreateView() voi non sarà in grado di utilizzare tutti i metodi generati per impostare la variabile per la rilegatura, in quanto non c'è superclasse comune oltre al ViewDataBinding, in tal modo si sarà costretti ad utilizzare la riflessione, oppure è possibile utilizzare il metodo di convenienza setVariable():

binding.setVariable(BR.viewModel,myViewModel); 
012.

Spero che questo aiuti a spiegare meglio il caso d'uso per questo metodo.