[英]android 2 way data binding example don't work as described
我讀了這篇關於2路android數據綁定的文章
我注意到代碼有點模糊,並決定實現可行的示例並將其放在github上,因此其他人將更容易深入研究它。 但按照本文提供的說明,我無法使其工作。
在我的例子中,我只有切換器和自定義控件的主要活動,也有切換器。 因此,當我檢查主切換器時,它會正確刷新所有內容並按預期工作,但是當我檢查/取消選中內部切換器時,它不會影響主視圖模型和活動中的任何內容 - 因此雙向綁定無法正常工作。
請幫我找出發生這種情況的原因並解決問題。
代碼已修復,現在至少在Android Studio 2.2 beta 1中按預期工作。
你幾乎把所有東西都搞定了。 在CustomSwitcher中,內部切換器的值發生更改時沒有通知。 您必須偵聽該更改並調用onValChanged回調。
這是你的代碼:
public CustomSwitcher(Context context, AttributeSet attrs) {
super(context, attrs);
this.binding = CustomSwitcherBinding.inflate(LayoutInflater.from(context), this, true);
}
public void setVm(boolean vmVal){
this.vm = vmVal;
this.binding.setItem(vm);
}
膨脹的綁定不會直接通知自定義切換器,因此您必須偵聽事件。 然后你必須打電話給聽眾。 您還必須避免無限循環,通過確保您沒有設置與已存在的值相同的值來反復通知相同的值。
public CustomSwitcher(Context context, AttributeSet attrs) {
super(context, attrs);
this.binding = CustomSwitcherBinding.inflate(LayoutInflater.from(context), this, true);
this.binding.addOnPropertyChangedCallback(new Observable.OnPropertyChangedCallback() {
@Override
public void onPropertyChanged(Observable sender, int propertyId) {
if (propertyId == BR.item) {
setVm(binding.getItem());
}
}
});
}
public void setVm(boolean vmVal){
if (vmVal != this.vm) {
this.vm = vmVal;
this.binding.setItem(vm);
if (this.onValChanged != null) {
this.onValChanged.onValChanged(this, vmVal);
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.