可观察布尔调用 set(true) 紧跟 set(false) 会导致只得到错误的回调



我有一个可观察布尔值,如下所示:

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 线程上运行。

最新更新