在 Kotlin 运行时后向房间查询添加过滤器

问题描述 投票:0回答:1

当我的应用程序启动时,我正在运行一个 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
库的内置功能,我想避免。

kotlin android-room viewmodel android-livedata composable
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.