简体   繁体   English

如何在Non-FragmentActivity上使用ViewModelProviders.of()获取ViewModel?

[英]How to fetch the ViewModel using ViewModelProviders.of() on non-FragmentActivity?

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
        }
    });
}

This code above works well on 'AppCompatActivity' or 'FragmentActivity'. 上面的代码在“ AppCompatActivity”或“ FragmentActivity”上运行良好。 However, it does not work on another type of Activity (eg. for me: GvrActivity). 但是,它不适用于其他类型的活动(例如,对我来说:GvrActivity)。 ViewModelProviders.of() is expecting 'FragmentActivity'. ViewModelProviders.of()预期为“ FragmentActivity”。

Is there another way to observe the DB? 还有另一种观察数据库的方法吗?

As for the DB, I am using ROOM. 至于数据库,我正在使用ROOM。

Answering my own question. 回答我自己的问题。

Observing a Room database is the solution. 解决方案是观察Room数据库。 Thanks CommonsWare. 感谢CommonsWare。

Here's full solution: 完整的解决方案:

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
            }
        });
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 ViewModelProviders.of(FragmentActivity).get(ViewModel :: class.java)要求活动而不是get()调用中的viewmodel - ViewModelProviders.of(FragmentActivity).get(ViewModel::class.java) asking for activity instead of viewmodel in get() call ViewModelProviders.of(activity) 只接受片段或片段活动 - ViewModelProviders.of(activity) only accept fragment or fragmentactivity 由于不推荐使用 ViewModelProviders.of(),我应该如何创建 ViewModel 的 object? - As ViewModelProviders.of() is deprecated, how should I create object of ViewModel? 当 ViewModelProviders.of() 被弃用时,如何在 Activity 和 Service 之间共享相同的 ViewModel? - How to share the same ViewModel between Activity and Service when ViewModelProviders.of() is deprecated? Kotlin 不理解 ViewModelProviders.of(activity ?: fragment) - Kotlin does not understand ViewModelProviders.of(activity ?: fragment) 我无法在 ViewModelProviders.of() function 中将片段作为参数 - I can't give fragment as argument inside ViewModelProviders.of() function Android Studio,AndroidX,ViewModelProviders.of(this)上的“无法解析方法。” - Android Studio, AndroidX, “Cannot resolve method..” on ViewModelProviders.of(this) 错误:找不到方法ViewModelProviders.of(Fragment,Factory)的合适方法 - error: no suitable method found for method ViewModelProviders.of(Fragment,Factory) ViewModelProviders.of(getActivity()) “无法解析(android.app.Activity)的方法” - ViewModelProviders.of(getActivity()) “Cannot resolve method of(android.app.Activity)” 直接实例化ViewModels,而不使用ViewModelProviders.of方法 - Instantiate ViewModels directly, without making use of ViewModelProviders.of method
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM