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