簡體   English   中英

android 2方式數據綁定示例不能像描述的那樣工作

[英]android 2 way data binding example don't work as described

我讀了這篇關於2路android數據綁定的文章

我注意到代碼有點模糊,並決定實現可行的示例並將其放在github上,因此其他人將更容易深入研究它。 但按照本文提供的說明,我無法使其工作。

在我的例子中,我只有切換器和自定義控件的主要活動,也有切換器。 因此,當我檢查主切換器時,它會正確刷新所有內容並按預期工作,但是當我檢查/取消選中內部切換器時,它不會影響主視圖模型和活動中的任何內容 - 因此雙向綁定無法正常工作。

請幫我找出發生這種情況的原因並解決問題。


代碼已修復,現在至少在Android Studio 2.2 beta 1中按預期工作。

鏈接到github上的代碼示例

幾乎把所有東西都搞定了。 在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.

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