ObservableBoolean调用set(true)后紧跟set(false)导致只获得false回调

时间:2018-01-03 18:45:10

标签: android android-databinding

我有一个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方法的错误回调。真正的回调发生了什么?为什么会掉线?有没有办法防止它掉线?

1 个答案:

答案 0 :(得分:2)

这是按设计工作的。 Android数据绑定设置发布消息中的所有值,因此只进行最后一次调用。这是为了提高性能。

如果您想确保内联调用,可以强制评估绑定:

no

这假设在UI线程上执行了public void search() { searching.set(true); binding.executePendingBindings(); searching.set(false); } 。如果不是,那么您必须发布它,因为必须在UI线程上运行search()