【问题标题】:How to fetch the ViewModel using ViewModelProviders.of() on non-FragmentActivity?如何在非 FragmentActivity 上使用 ViewModelProviders.of() 获取 ViewModel?
【发布时间】:2017-10-11 23:13:13
【问题描述】:
private void subscribeToModel() {
    final MyViewModel model = ViewModelProviders.of(this)
            .get(MyViewModel.class);

    // Update the list when the data changes
    model.getItems().observe(this, new Observer<List<Item>>() {
        @Override
        public void onChanged(@Nullable List<Item> items) {
            // Do something useful
        }
    });
}

上面的代码在“AppCompatActivity”或“FragmentActivity”上运行良好。 但是,它不适用于另一种类型的活动(例如,对我来说:GvrActivity)。 ViewModelProviders.of() 期待“FragmentActivity”。

还有其他观察DB的方法吗?

至于数据库,我使用的是 ROOM。

【问题讨论】:

  • 观察房间数据库不需要ViewModelProviders。从@Query 方法返回反应类型(例如,LiveDataFlowable)可以让您观察变化。但是,您需要通过其他方法来处理配置更改(例如,onRetainNonConfigurationInstance(),保留片段)。最后,所有架构组件的VieModel 系统所做的就是使用保留的片段。

标签: android mvvm viewmodel


【解决方案1】:

回答我自己的问题。

解决方案是观察 Room 数据库。感谢 CommonsWare。

这里是完整的解决方案:

private void subscribeToModel() {
    final DatabaseCreator databaseCreator = DatabaseCreator.getInstance();
    LiveData<List<Item>> itemLiveData = databaseCreator.getDatabase().itemDao().getAllLiveData();
    if(itemLiveData != null) {
        itemLiveData.observe(this, new Observer<List<Item>>() {
            @Override
            public void onChanged(@Nullable List<Item> items) {
                // Do something useful
            }
        });
    }
}

【讨论】:

    猜你喜欢
    • 2019-07-02
    • 1970-01-01
    • 2019-12-23
    • 2018-12-18
    • 2019-02-17
    • 2018-12-29
    • 2021-08-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多