首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更新MutableLiveData对象的AndroidViewModel

更新MutableLiveData对象的AndroidViewModel
EN

Stack Overflow用户
提问于 2018-01-02 06:31:09
回答 1查看 2.3K关注 0票数 0

我在初始化ViewModel中的布尔属性时遇到问题。我不确定做这件事的正确方式。

我在主活动上有一个开关控制,如果我改变开关,我想要改变布尔值startsWith。根据布尔值,我将调用相应的Dao函数。

我正在尝试初始化值,但不确定如何执行此操作。我应该观察布尔值,我应该使用双向绑定,这个属性应该是MutableLiveData吗?

代码语言:javascript
复制
wordListViewModel = ViewModelProviders.of(this).get(WordListViewModel.class);
wordListViewModel.setStartsWith(true);

我收到这个错误,甚至无法启动活动:

代码语言:javascript
复制
Attempt to invoke virtual method 'boolean java.lang.Boolean.booleanValue()' on a null object reference

代码:

代码语言:javascript
复制
public class WordListViewModel extends AndroidViewModel {

    final MutableLiveData<String> searchText = new MutableLiveData<>();
    final MutableLiveData<Boolean> startsWith = new MutableLiveData<>();

    private final LiveData<List<WordEntity>> list;

    private AppDatabase appDatabase;

    public WordListViewModel(Application application) {
        super(application);

        appDatabase = AppDatabase.getDatabase(this.getApplication());

        if (startsWith.getValue() == true)
            list = Transformations.switchMap(searchText, searchText -> {
                return appDatabase.wordDao().getWordsStartingWith(searchText);
            });
        else
            list = Transformations.switchMap(searchText, searchText -> {
                return appDatabase.wordDao().getWordsLike(searchText);
            });

    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-02 08:50:29

我想我想通了。检查必须在switchMap函数内部。其余代码仅在模型初始化时运行。

我更改了我的代码,它起作用了:

代码语言:javascript
复制
    if (startsWith.getValue() == null)
        startsWith.setValue(true);

    list = Transformations.switchMap(searchText, searchText -> {
        if (startsWith.getValue() == true)
            return appDatabase.dictWordDao().getWordsStartingWith(searchText);
        else
            return appDatabase.dictWordDao().getWordsLike(searchText);
    });
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48053777

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档