簡體   English   中英

Android setVariable(BR.xyz, model) 和 databinding.setXYZ(model) 有什么區別

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM