gpt4 book ai didi

Android Room LiveData 选择查询参数

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:24:48 25 4
gpt4 key购买 nike

我决定通过开发一个简单的数据库应用来自学 Java 和 Android。我已经以“惰性”方式实现了一些功能——所有选择都在主线程上完成。

现在我想使用 LiveData 进行选择。我读过 simplistic training guide on android developers并实现 a more complex solution from codelabs guide ,带有 LiveData 和 RecyclerView。 对整个表插入、更新、删除和选择工作完美,但我不知道如何将参数传递给选择。

示例:我有一个包含所有记录的可滚动列表的 Activity ,我想对列表应用一些过滤器(搜索)。据我了解,DAO 中的实际选择方法仅调用一次(在创建 ViewModel 时),因此如何使用新参数更新查询?

其他示例:我有其他 Activity 显示记录的所有列(用于查看和编辑)。 如何将 id 传递给查询以选择单行?

我的数据库代码与 this codelab 中的差不多

编辑:我最终是这样做的:每次我想更新查询参数时,我都会从 DAO 中调用 select(通过 ViewModel 和 Repo)并向新列表中添加一个新的观察者。该解决方案似乎不是最佳解决方案,但我想它可行...

最佳答案

我认为您的解决方案是 Transformations.switchMap。最简单的示例,它在代码实验室的情况下如何工作

public class WordViewModel extends AndroidViewModel {
private WordRepository mRepository;
private LiveData<List<Word>> mAllWords;
private LiveData<List<Word>> searchByLiveData;
private MutableLiveData<String> filterLiveData = new MutableLiveData<>();

public WordViewModel (Application application) {
super(application);
mRepository = new WordRepository(application);
mAllWords = mRepository.getAllWords();
searchByLiveData = Transformations.switchMap(filterLiveData,
v -> mRepository.searchBy(v));
}

LiveData<List<Word>> getSearchBy() { return searchByLiveData; }
void setFilter(String filter) { filterLiveData.setValue(filter); }
LiveData<List<Word>> getAllWords() { return mAllWords; }
public void insert(Word word) { mRepository.insert(word); }
}

因此,当您设置过滤器值时,它会更改 searchByLiveData 的值

希望对你有帮助

关于Android Room LiveData 选择查询参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48966985/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com