InverseBindingListener

public interface InverseBindingListener

android.databinding.InverseBindingListener


A listener implemented by all two-way bindings to be notified when a triggering change happens. For example, when there is a two-way binding for android:text, an implementation of InverseBindingListener will be generated in the layout's binding class.

 private static class InverseListenerTextView implements InverseBindingListener {
     @Override
     public void onChange() {
         mObj.setTextValue(mTextView.getText());
     }
 }
 

A BindingAdapter should be used to assign the event listener. For example, android:onTextChanged will need to trigger the event listener for the android:text attribute.

 @InverseBindingAdapter(attribute = "android:text", event = "android:textAttrChanged")
 public static void captureTextValue(TextView view, ObservableField<CharSequence> value) {
     CharSequence newValue = view.getText();
     CharSequence oldValue = value.get();
     if (oldValue == null) {
         value.set(newValue);
     } else if (!contentEquals(newValue, oldValue)) {
         value.set(newValue);
     }
 }
 @BindingAdapter(value = {"android:beforeTextChanged", "android:onTextChanged",
                          "android:afterTextChanged", "android:textAttrChanged"},
                          requireAll = false)
 public static void setTextWatcher(TextView view, final BeforeTextChanged before,
                                   final OnTextChanged on, final AfterTextChanged after,
                                   final InverseBindingListener textAttrChanged) {
     TextWatcher newValue = new TextWatcher() {
         ...
         @Override
         public void onTextChanged(CharSequence s, int start, int before, int count) {
             if (on != null) {
                 on.onTextChanged(s, start, before, count);
             }
             if (textAttrChanged != null) {
                 textAttrChanged.onChange();
             }
         }
     }
     TextWatcher oldValue = ListenerUtil.trackListener(view, newValue, R.id.textWatcher);
     if (oldValue != null) {
         view.removeTextChangedListener(oldValue);
     }
     view.addTextChangedListener(newValue);
 }
 

Summary

Public methods

abstract void onChange()

Notifies the data binding system that the attribute value has changed.

Public methods

onChange

void onChange ()

Notifies the data binding system that the attribute value has changed.