2016-02-10 7 views
5

pracowałem na android wiązania danych i natknąłem się na scenariuszu, który możemy ustawić model używając dwa sposoby:Android Jaka jest różnica między SetVariable (BR.xyz, model) i databinding.setXYZ (model)

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

i możemy również ustawić jak:

binding.setUser(user); 

Czy ktoś może wyjaśnić to, jaka jest różnica między tymi dwoma?

User Model:

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

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

Odpowiedz

6

Robią to samo. Według the docs, czasami nie można określić typu zmiennej, więc będziesz musiał użyć metody setVariable(). W normalnych warunkach generowane są metody (metody) setX(). Lepiej korzystaj z wygenerowanych metod.

3

Rozważmy przypadek, gdy masz abstrakcyjna klasa które nie mają wspólny układ wiązania (z wyjątkiem oczywiście nadklasą ViewDataBinding którym wszystkie układy wiążące dziedziczą z):

public abstract classs EditorActivityFragment<T extends ViewDataBinding> { 

w tej klasie onCreateView() ty nie będą mogli używać żadnych wygenerowane metody, aby ustawić zmienną do wiązania, jak nie ma wspólnego nadklasą oprócz ViewDataBinding, więc będziesz zmuszony użyć refleksji, czy można użyć metody ogólnospożywczy setVariable():

binding.setVariable(BR.viewModel,myViewModel); 

Mam nadzieję, że pomoże to lepiej wyjaśnić zastosowanie tej metody.

Powiązane problemy