【发布时间】:2019-01-22 19:52:10
【问题描述】:
关于过去的问题How to get a ViewModel?,以及我找到的示例,它并不能解决我的问题。我没有在那里发表评论的权限,所以我不得不再次询问。我没有 ViewModelProviders 类,我想在我找到的所有示例和文档中使用“of”方法,例如
model = ViewModelProviders.of(this).get(Something.class);
在 Android Studio 中,我没有找到“android.arch.lifecycle:extensions”作为依赖项添加。当我搜索时,它说“没什么可显示的”。我在 API 27。 因此,尝试使用未弃用的元素,我在 Fragment 中有这个:
public class EventDetailsFragment extends Fragment
{
EventViewModel viewModel;
@Override
public void onActivityCreated (Bundle savedInstanceState)
{
super.onActivityCreated(savedInstanceState);
ViewModelProvider.Factory factory = ViewModelProvider.AndroidViewModelFactory.getInstance(getActivity().getApplication());
// HERE IS THE ISSUE: Seems not good practice to have to create a new ViewModelProvider every time this Fragment is created.
// Perhaps I should just create a singleton ViewModelProvider in the Activity or Application,
// so here could call getActivity().getViewModelProvider(this, factory).
ViewModelProvider viewModelProvider = new ViewModelProvider(this, factory);
viewModel = viewModelProvider.get(EventViewModel.class);
...
}
我该怎么办?
【问题讨论】:
-
您发布的代码完全是
ViewModelProviders.of()所做的代码 - 它会在每次调用时创建一个新的ViewModelProvider类。 -
有趣。似乎效率低下。你觉得我使用单例的想法如何?
-
ViewModelProvider只是ViewModelStore和Factory的一个薄包装器,因此使其成为您的Activity/Fragment 的成员变量(它不能是单例,因为它引用了@ 987654329@ 即 Activity/Fragment)当然很方便,但它不会改变您的应用程序的工作/执行方式。