我有一个可观察布尔值,如下所示:
public final ObservableBoolean searching = new ObservableBoolean(false);
然后,我有一种方法可以执行HTTP请求:
public void search() {
searching.set(true);
// Perform HTTP request, then on Result:
searching.set(false);
}
我有一个绑定到"搜索"的视图,它触发了一个自定义的 BindingAdapter 方法,传入搜索的值。
当searching.set(true(和searching.set(false(之间有一个暂停时,上述方法效果很好,就像发出异步HTTP请求时一样。我按预期收到对我的绑定适配器方法的两个回调,一个为真,一个为假。
当我缓存搜索结果并且不再需要HTTP请求时,出现问题。在这种情况下,searching.set(true( 和 searching.set(false( 之间没有暂停,如下所示:
public void search() {
searching.set(true);
searching.set(false);
}
使用此代码,我只会收到对我的 BindingAdapter 方法的错误回调。真正的回调发生了什么变化?为什么会被丢弃?有没有办法防止它掉落?
这是按设计工作的。Android 数据绑定会设置已发布消息中的所有值,因此只会进行最后一次设置调用。这旨在提高性能。
如果要确保调用是内联的,可以强制评估绑定:
public void search() {
searching.set(true);
binding.executePendingBindings();
searching.set(false);
}
这假定search()
在 UI 线程上执行。如果不是,则必须发布它,因为executePendingBindings()
必须在 UI 线程上运行。