当我的应用程序启动时,我正在运行一个 Room 查询。
@Query("SELECT * FROM myTable")
fun get(): LiveData<List<MyItem?>?>
查询运行后,我的用户将选择几个过滤器,这些过滤器应应用于
tags
的myTable
列。
我有另一个查询使用
String
.
@Query("SELECT * FROM myTable WHERE tags LIKE '%' || :filters || '%'")
fun getFilteredByString(filters: Strings): LiveData<List<MyItem?>?>
我也有一个使用
Lists
的查询。
@Query("SELECT * FROM myTable WHERE tags IN (:filters)")
fun getFilteredByList(filters: List<Strings>): LiveData<List<MyItem?>?>
这就是我设置 ViewModel 的方式:
class MyViewModel(private val application: Application) : ViewModel() {
...
private val database: MyDatabase = MyDatabase.getDatabase(application)
private val myDao: MyDao = database.myDao()
val results = myDao.get()
val filters = MutableLiveData<List<String>?>()
...
}
如何将
results
中的值切换为其他两个查询之一?
switchMap
,@Transaction
,MediationLiveData
)。解决方案应该是 results
是一个静态变量,它以某种方式转换为 ViewModel
中的另一个查询,而不是 UI 的 @Composable
中。
我看了this solution,但它似乎涉及超出
Room
库的内置功能,我想避免。
在这里找到解决方案,其中涉及从我的 DAO 中删除LiveData
。