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

问题描述 投票:2回答:1

我正在阅读官方docs来学习数据绑定。一切都有希望的是,双向绑定中可能存在无限循环。根据two-way binding上的官方文档:

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

我理解语句的第一部分,即如果属性发生更改并且将新值分配给backing属性,则将调用用@InverseBindingAdapter进行注释的方法。

但是我不明白的是为什么在此过程中调用@InverseBindingAdapter方法时为何将@BindingAdapter方法称为再次,以及它如何导致无限循环?

android android-databinding two-way-binding
1个回答
0
投票

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

所以这是一些视觉效果

  1. 用户->输入名称“乔”
  2. InverseBindingAdapter->由更新触发
  3. ObservableField / LiveData->也通过2种方式进行了更新,现在包含值“ Joe”
  4. 随着ObservableField / LiveData的更新,将触发BindingAdapter来将新值设置到字段中。
  5. InverseBindingAdapter->在该字段中检测到另一个更改并被触发。
  6. 重复执行步骤3、4、5...。

在高级DataBinding上检查我的article on Medium,它实际上通过ViewPager和2路绑定示例描述了这种情况。 (是的,无耻的自插免责声明)

© www.soinside.com 2019 - 2024. All rights reserved.