我正在使用Dagger 2 DataBindng
和新的Android生命周期组件,其中包含ViewModels
。
在我的ViewModel
内,我怎样才能访问我的strings.xml?我最初想的是,在Context
注入一个viewModel
,然而,这只会泄漏内存。
还有其他方法吗?
答案 0 :(得分:5)
有一个AndroidViewModel
,它接收Application
个实例作为参数。
来自docs:
应用程序上下文感知 ViewModel 。
子类必须有一个构造函数,它接受 Application 作为唯一参数。
您可以使用该参数从strings.xml
检索字符串。
链接中的repo使用 ViewModel 而非AndroidViewModel。如果我将我的ViewModel扩展为使用 AndroidViewModel 并包含应用 - 它会尝试注入 MyApplication 而不是应用< / strong>如果这是有道理的。
我已查看GithubBrowserSample。这是UserViewModel
的样子:
public class UserViewModel extends ViewModel {
...
@Inject
public UserViewModel(UserRepository userRepository, RepoRepository repoRepository) {
...
}
...
}
以下是我所做的改变:
public class UserViewModel extends AndroidViewModel {
...
@Inject
public UserViewModel(Application application, UserRepository userRepository, RepoRepository repoRepository) {
super(application);
...
}
...
}