如何只设置一个观察者进行房间查询

how to just set one observer for a room query

我正在使用这个空间来存储一些从服务器端获取的本地数据库中的数据。 这些数据将显示在 recyclerView 中, 还有一个 searchView 允许用户搜索一些特定的数据。

现在,我想知道有没有什么方法可以以一种方式应用其中的两个功能? 我使用这个查询来做到这一点,但似乎观察者不会仅仅因为函数参数的变化而触发:

换句话说,我的问题是:

想象一下,我这样调用这个查询:

database.searchFor(null,true).observe(this,observer{
....
})

如何在使用另一个参数调用查询后触发上述观察者:

database.searchFor("Alex",false)

我应该改变结构和我这样做的方式吗?

考虑使用另一个 LiveData 和 Transformation's switchMap

假设您有 ViewModel,您可以在其中声明 2 个实时数据 - 第一个用于参数(keywordall),第二个 - 用于数据库观察:

val params = MutableLiveData<Pair<String?, Boolean>>(Pair(null, true)) // <-- default parameters

val searchResults = Transformations.switchMap(params) 
    { 
       params -> database.searchFor(params.first, params.second) // <-- updates with parameters' changes
    }

在您的 Activity/Fragment 中设置参数值并观察结果:

viewModel.searchResults.observe(this, Observer{
   ....
})

viewModel.params.value = Pair("Alex", false) // <-- to search results