- . Android Studio 2.1 . Android Studio 2.2 , . include , :
<layout>
<date><variable name="item" type="MainVM"></data>
<LinearLayout>
<TextView android:text="@{item.title}"/>
<include layout="@layout/other" app:vm="@={item.isFlexible}">
</LinearLayout>
</layout>
:
<layout>
<date><variable name="item" type="boolean"></data>
<LinearLayout>
...
<switch android:checked="@={item}"/>
...
</LinearLayout>
</layout>
. , . , ( , ):
@InverseBindingMethods({
InverseBindingMethod(type = CustomControl.class, attribute="vm")})
public class CustomCtrl extends View {
private CustomCtrlBinding binding;
private InverseBindingAdapter listener;
public CustomCtrl(...) {
binding = ...
binding.addOnPropertyChangedCallback(new OnPropertyChangedCallback() {
@Overriide
public void OnPropertyChanged(Observable sender, int propertyId) {
if (listener != null) {
listener.onChange();
}
}
});
}
@Bindable
public boolean getVm() { return binding.getItem(); }
public void setVm(boolean vm) {
binding.setItem(vm);
}
@BindingAdapter("vmAttrChanged")
public static void setListener(CustomCtrl view,
InverseBindingListener listener) {
view.listener = listener;
}
}
:
<layout>
<date><variable name="item" type="MainVM"></data>
<LinearLayout>
<TextView android:text="@{item.title}"/>
<CustomCtrl app:vm="@={item.isFlexible}">
</LinearLayout>
</layout>
:
<layout>
<date><variable name="item" type="boolean"></data>
<LinearLayout>
...
<switch android:checked="@={item}"/>
...
</LinearLayout>
</layout>
, , InverseBindingListener .