web-dev-qa-db-ja.com

Androidサービス内のViewModel(代替)

ほとんどの場合ユーザーに表示されるUIを提供するサービスがあります。

問題が発生したとき、私は新しいアプリケーションアーキテクチャを試していました。

MyModelviewModel viewModel = ViewModelProviders.of(this).get(MyModelviewModel.class);

しかし、ご存知のように、thisAppCompatまたはFragmentのみにすることができます

代替手段はありますか?または、私がLiveDataを置くように、オブザーバーをViewModelに直接置くことはできますか

viewModel.getList().observe(Playground.this, new Observer<List<TestEntity>>() {
    @Override
    public void onChanged(@Nullable List<TestEntity> items) {
        recyclerViewAdapter.addItems(items);
    }
});
13
CBeTJlu4ok

LiveDataは、ViewModelなしで独立して使用できます。observeForever(Observer<T> observer)またはobserve(LifecycleOwner owner, Observer<T> observer)を使用できますが、適切なLifecycleOwnerインスタンスを提供すると、サービスまたはビューにLifecycleOwnerを実装できます。

ViewModelProvidersは、ViewModelまたはFragmentごとにActivityのキャッシュを提供するだけです。new MyModelviewModel()を使用して、ViewModelを直接作成できます。

11
AvatarQing