【发布时间】:2019-03-23 10:57:43
【问题描述】:
我在 Activity 中创建 android ViewModel:
EventViewModel model = ViewModelProviders.of(this).get(EventViewModel.class);
为此,我创建了EventViewModel:
public class EventViewModel extends ViewModel {
private final EventDao eventDao;
public EventViewModel(EventDao eventDao) {
this.eventDao = eventDao;
}
public void createEvent(final Event event) {
new Thread(new Runnable() {
@Override
public void run() {
eventDao.insert(event);
}
}).start();
}
}
我了解到我必须创建自定义工厂才能将我的EventDao 注入EventViewModel。好吧,假设我做到了。
public class ViewModelFactory implements ViewModelProvider.Factory {
private final EventDao eventDao;
@Inject
public ViewModelFactory(EventDao eventDao) {
this.eventDao = eventDao;
}
@NonNull
@Override
public <T extends ViewModel> T create(@NonNull Class<T> modelClass) {
if (modelClass == EventViewModel.class) {
return (T) new EventViewModel(eventDao);
}
return null;
}
}
但是接下来要做什么呢?我看到了几种方法。如果相信谷歌的例子,我必须在 MyActivity 中做下一步:
EventViewModel model = ViewModelProviders.of(this, new ModelFactory(eventDao)).get(EventViewModel.class);
1) 但是我在 MyActivity 中哪里可以得到eventDao?
2) 如果每个 ViewModel 使用 dao 类,我是否需要为每个 ModelFactory 创建自定义 ModelFactory?
我使用Dagger 2,我只是想了解如何使用DAO 创建ViewModel 并在MyActivity 中使用这个ViewModel?
【问题讨论】:
-
您可以创建
DatabaseModule类并提供该类的dao。所以你只需要在你的活动中@Injet the Dao -
请为您尝试使用
@Inject配置的组件添加代码
标签: java android mvvm dagger-2