针对之前的问题如何获取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
类。 - ianhanniballakeViewModelProvider
只是ViewModelStore
和Factory
的一个薄包装器,因此将其作为Activity/Fragment的成员变量(它不能是单例,因为它引用了ViewModelStoreOwner
即Activity/Fragment)肯定很方便,但这不会改变您的应用程序的工作/性能。 - ianhanniballake