从ViewModel访问strings.xml

时间:2017-09-27 08:54:37

标签: android android-context dagger-2 android-architecture-components android-viewmodel

我正在使用Dagger 2 DataBindng和新的Android生命周期组件,其中包含ViewModels

在我的ViewModel内,我怎样才能访问我的strings.xml?我最初想的是,在Context注入一个viewModel,然而,这只会泄漏内存。

还有其他方法吗?

1 个答案:

答案 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);
            ...
        }
        ...
    }