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