Annotation Type InverseBindingAdapter


  • @Target({METHOD,ANNOTATION_TYPE})
    public @interface InverseBindingAdapter
    InverseBindingAdapter is associated with a method used to retrieve the value for a View when setting values gathered from the View. This is similar to BindingAdapters:
     @InverseBindingAdapter(attribute = "android:text", event = "android:textAttrChanged")
     public static String captureTextValue(TextView view, CharSequence originalValue) {
         CharSequence newValue = view.getText();
         CharSequence oldValue = value.get();
         if (oldValue == null) {
             value.set(newValue);
         } else if (!contentEquals(newValue, oldValue)) {
             value.set(newValue);
         }
     }
     

    The default value for event is the attribute name suffixed with "AttrChanged". In the above example, the default value would have been android:textAttrChanged even if it wasn't provided.

    The event attribute is used to notify the data binding system that the value has changed. The developer will typically create a BindingAdapter to assign the event. For example:

     @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);
     }
     

    Like BindingAdapters, InverseBindingAdapter methods may also take DataBindingComponent as the first parameter and may be an instance method with the instance retrieved from the DataBindingComponent.

    See Also:
    DataBindingUtil#setDefaultComponent(DataBindingComponent), InverseBindingMethod
    • Required Element Summary

      Required Elements 
      Modifier and Type Required Element Description
      java.lang.String attribute
      The attribute that the value is to be retrieved for.
    • Optional Element Summary

      Optional Elements 
      Modifier and Type Optional Element Description
      java.lang.String event
      The event used to trigger changes.
    • Element Detail

      • attribute

        java.lang.String attribute
        The attribute that the value is to be retrieved for.
      • event

        java.lang.String event
        The event used to trigger changes. This is used in BindingAdapters for the data binding system to set the event listener when two-way binding is used.
        Default:
        ""