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