Skip to content Skip to sidebar Skip to footer

Two-way Data-binding Infinite Loop

I have a list of items. In each item's row I have 2 EditTexts side-by-side. EditText-2 depends on EditText-1's value. This list is bound with data-binding values in HashMap

Solution 1:

The reason you stated is correct and it will make a infinite loop definitely. And there is a way to get out from the infinite loop of this problem, android official provided a way to do so (But it is not quite obvious.)(https://developer.android.com/topic/libraries/data-binding/index.html#custom_setters)

Binding adapter methods may optionally take the old values in their handlers. A method taking old and new values should have all old values for the attributes come first, followed by the new values:

@BindingAdapter("android:paddingLeft")publicstaticvoidsetPaddingLeft(View view, int oldPadding, int newPadding) {
       if (oldPadding != newPadding) {
           view.setPadding(newPadding,
                           view.getPaddingTop(),
                           view.getPaddingRight(),
                           view.getPaddingBottom());
       }
    }

You can use the old value and new value comparison to make the setText function called conditionally.

@BindingAdapter("android:text")publicstaticvoidsetShareValue(EditText editText, double oldShare,double newShare) {
    if(oldShare != newShare)
    {
        if (newShare!= 0) {
            editText.setText(String.valueOf(newShare));
        } else {
            editText.setText("");
        }
    }
}

Post a Comment for "Two-way Data-binding Infinite Loop"