jwu*_*ler 5 architecture android
我试图围绕新的Android体系结构组件,特别是ViewModel展开思考。
我的印象是,Fragment不应该知道其拥有的Activity或Fragment,因此可以在应用程序的不同上下文中使用它。这些示例似乎通过直接在Fragment中而不是Fragment所有者中声明ViewModel范围而与此矛盾:
viewModel = ViewModelProviders.of(getActivity()).get(SomeViewModel.class);
Run Code Online (Sandbox Code Playgroud)
我希望能够在Master / Detail配置中使用此Fragment,在该配置中,它们都共享相同的状态(即ViewModel实例),并且在ViewPager内部,其中所有Fragments需要单独的状态(即,单独的ViewModel实例)。我希望Fragment所有者决定范围,这种方法似乎不支持该范围。
我想出的一种解决方法是,如有必要,可以传入一个配置的ViewModelProvider以显式扩展ViewModel的范围(例如,在Master / Detail配置中),并且默认情况下具有单独的ViewModel:
final ViewModelProvider viewModelProvider;
if (viewModelProviderOverride != null) {
viewModelProvider = viewModelProviderOverride;
} else {
viewModelProvider = ViewModelProviders.of(this);
}
viewModel = viewModelProvider.get(SomeViewModel.class);
Run Code Online (Sandbox Code Playgroud)
这样,所有者可以决定是否多个片段将共享其状态。我还没有完全考虑到这一点,但是似乎有点可疑,因为文档中似乎没有暗示它。我觉得我缺少明显的东西。
表示viewModel = ViewModelProviders.of(getActivity()).get(SomeViewModel.class);您希望将 的状态ViewModel限制在 Activity 范围内。如果您不希望片段的范围仅限于活动,您可以调用viewModel = ViewModelProviders.of(this).get(SomeViewModel.class);. 现在您要做的就是if (shareState)调用第一个,如果没有调用第二个。
| 归档时间: |
|
| 查看次数: |
1004 次 |
| 最近记录: |