![](/img/trans.png)
[英]What is the difference between Android parent=“@style/xyz” and parent=“xyz”?
[英]Android What is Difference between setVariable(BR.xyz, model) and databinding.setXYZ(model)
我正在研究 android 數據綁定,遇到了我們可以使用以下兩種方式設置 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?
我們也可以這樣設置:
binding.setUser(user);
任何人都可以解釋這兩者之間的區別嗎?
用戶Model:
public class User{
public String fName;
public String lName;
public User(String fName, String lName){
this.fName = fName;
this.lName = lName;
}
}
他們做同樣的事情。 根據文檔 ,有時無法確定變量的類型,因此您必須使用setVariable()
方法。 在正常情況下,將生成setX()
方法。 最好使用生成的方法。
考慮具有不共享公共綁定布局的抽象類的情況(當然除了所有綁定布局繼承的超類ViewDataBinding
):
public abstract classs EditorActivityFragment<T extends ViewDataBinding> {
在這個類' onCreateView()
你將無法使用任何生成的方法將變量設置為綁定,因為除了ViewDataBinding之外沒有常見的超類,因此你將被迫使用反射,或者你可以使用方便方法setVariable()
:
binding.setVariable(BR.viewModel,myViewModel);
我希望這有助於更好地解釋這種方法的用例。
如果還有人不清楚,這里是官方文檔的鏈接。 鏈接到文檔 - 單擊此處!
@JarettMillard 分享的文檔摘錄
boolean setVariable (int variableId,
Object value)
在 Binding 中設置一個值 class。
通常,開發人員將能夠直接調用子類的 set 方法。 比如Binding中有一個變量x,就會產生一個setX方法。 但是,有時候ViewDataBinding具體的子類是未知的,所以生成的方法不通過反射是發現不了的。 setVariable 調用允許在不反射的情況下設置變量的值。
來自他們官方文檔鏈接的更多參考資料!
override fun onBindViewHolder(holder: BindingHolder, position: Int) {
item: T = items.get(position)
holder.binding.setVariable(BR.item, item);
holder.binding.executePendingBindings();
}
當您無法訪問特定綁定 class 而是訪問更通用的版本,如ViewDataBinding (類似於所有綁定的基礎 class)時,這很有用。 在這種情況下,您可以使用此方法來設置屬性,就像我們在上面的情況下用於 item 變量一樣。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.