5

我正在使用Dagger 2 DataBindng新的 Android 生命周期组件,它们具有ViewModels.

在我的内部我ViewModel怎么能访问我的strings.xml?起初我在想,将 aContext注入viewModel,但是,这只会泄漏内存。

还有其他方法吗?

4

1 回答 1

7

有一个AndroidViewModel,它接收Application实例作为参数。

来自文档:

应用程序上下文感知ViewModel

子类必须有一个接受Application作为唯一参数的构造函数。

strings.xml您可以使用该参数检索字符串。


但是,链接中的 repo 使用ViewModel而不是 AndroidViewModel。如果我扩展我的 ViewModel 以使用AndroidViewModel并包含Application -如果这有意义,它会尝试注入MyApplication而不是Application 。

我检查了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);
            ...
        }
        ...
    }

于 2017-09-27T08:57:56.457 回答