双向数据绑定如何导致无限循环?

Har*_*rry 5 android android-databinding two-way-binding

我正在通过阅读官方文档来学习数据绑定。除了双向绑定中可能存在的无限循环之外,一切都是有意义的。根据双向绑定的官方文档:

使用双向数据绑定时请注意不要引入无限循环。当用户更改属性时,将调用使用 @InverseBindingAdapter 注释的方法,并将值分配给支持属性。反过来,这将调用使用@BindingAdapter注释的方法,这将触发对使用@InverseBindingAdapter注释的方法的另一个调用,依此类推。

我理解声明的第一部分,@InverseBindingAdapter如果属性发生更改并且新值分配给支持属性,则将调用注释方法。

但我不明白的是,为什么 在这个过程中@InverseBindingAdapter调用method时又@BindingAdapter调用method,以及如何导致无限循环?

Rai*_*ker 2

我想迟到总比不到好:) 无限循环发生的原因InverseBindingAdapter基本上是变化的观察者。因此,当用户更改某些内容时,onChangedInverseBindingAdapter 中的观察者就会被触发并执行一些逻辑。因此,然后BindingAdapter也会对字段中的更改做出反应并再次更新值,以便InverseBindingAdapter再次触发更改监听器,而不是我们处于循环中。

这是一些视觉效果

  1. 用户 -> 输入他们的名字“Joe”
  2. InverseBindingAdapter -> 由更新触发
  3. ObservableField/LiveData -> 还更新了 2 路绑定,现在包含值“Joe”
  4. 当 ObservableField/LiveData 更新时,BindingAdapter 被触发以将新值设置到字段中。
  5. InverseBindingAdapter -> 检测到字段中的另一个变化并被触发。
  6. 重复步骤3、4、5......

查看我在 Medium 上关于高级数据绑定的文章,它实际上使用 ViewPager 和 2 路绑定示例描述了这种情况。(是的,无耻的自插免责声明)