我希望LiveData
的RecyclerView
来源根据您选择的列表而改变。而且,如果您在此搜索中选择了一个来源。目前,我无法在两个来源之间来回切换。因此,我可以显示“房间”数据库中的项目,但是如果选择了另一个列表,则无法更改源。
示例:如果您选择列表2,则LiveData
源将被更改,并且列表2中包含的所有项目都将显示。现在,您还应该可以在此列表中搜索单词2。如何在应用程序运行时执行此操作?
我当前Repository
的一部分:
public LiveData<List<VocabularyEntity>> getVocabularies(int listNumber, String searchText) {
if (listNumber == 0) {
return listDao.getVocabularies(searchText);
} else {
return listDao.getVocabularyList(listNumber, searchText);
}
}
以及我当前ViewModel
的一部分:
public LiveData<List<ListEntity>> getLists() {
return repository.getLists(listNumber, searchText);
}
我没有看到实际上在您的setValue
上正在调用的任何getValue
或LiveData
函数。
为了更改LiveData
以与实时更改进行交互,您需要在setValue
对象中调用LiveData
。我认为,类似以下内容应该可以解决您的问题。
// I am assuming you have this variable declared in your viewmodel
private LiveData<List<ListEntity>> vocabList;
public LiveData<List<ListEntity>> getLists() {
List<ListEntity> vocabListFromDB = repository.getLists(listNumber, searchText);
vocabList.setValue(vocabListFromDB);
return vocabList;
}
并且您不必再从存储库函数中返回LiveData
对象。
public List<VocabularyEntity> getVocabularies(int listNumber, String searchText) {
if(listNumber == 0) {
return listDao.getVocabularies(searchText);
} else {
return listDao.getVocabularyList(listNumber, searchText);
}
}
我希望有帮助!
我想分享我对实际执行此操作的个人看法。我宁愿使用ContentObserver
而不是LiveData
设置。以我的拙见,用ContentObserver
和CursorLoader
实施似乎是一个更简单,更强大的解决方案。