如何在非 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
}
});
}
上面的代码在 'AppCompatActivity' 或 'FragmentActivity' 上运行良好。
但是,它不适用于另一种类型的 Activity(例如,对我来说:GvrActivity)。 ViewModelProviders.of() 期待 'FragmentActivity'.
还有其他观察数据库的方法吗?
关于DB,我用的是ROOM
回答我自己的问题。
观察 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
}
});
}
}
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' 上运行良好。 但是,它不适用于另一种类型的 Activity(例如,对我来说:GvrActivity)。 ViewModelProviders.of() 期待 'FragmentActivity'.
还有其他观察数据库的方法吗?
关于DB,我用的是ROOM
回答我自己的问题。
观察 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
}
});
}
}