我正在阅读官方docs来学习数据绑定。一切都有希望的是,双向绑定中可能存在无限循环。根据two-way binding上的官方文档:
使用双向数据绑定时,请注意不要引入无限循环。当用户更改属性时,将调用使用@InverseBindingAdapter注释的方法,并将该值分配给backing属性。反过来,这将调用使用@BindingAdapter注释的方法,这将触发另一个使用@InverseBindingAdapter注释的方法的调用,依此类推。
我理解语句的第一部分,即如果属性发生更改并且将新值分配给backing属性,则将调用用@InverseBindingAdapter
进行注释的方法。
但是我不明白的是为什么在此过程中调用@InverseBindingAdapter
方法时为何将@BindingAdapter
方法称为再次,以及它如何导致无限循环?
[迟到总比我猜想要晚:)发生无限循环的原因是InverseBindingAdapter
基本上是变化的观察者。因此,当用户进行了某些更改时,InverseBindingAdapter中的onChanged
观察器将被触发并执行一些逻辑。因此,然后BindingAdapter
也会对字段中的更改做出反应并再次更新值,以便再次触发InverseBindingAdapter
中的更改侦听器,而不是处于循环中。
所以这是一些视觉效果
在高级DataBinding上检查我的article on Medium,它实际上通过ViewPager和2路绑定示例描述了这种情况。 (是的,无耻的自插免责声明)