gpt4 book ai didi

architecture - 如何正确地确定 ViewModel 的范围?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:10:13 24 4
gpt4 key购买 nike

我正在努力思考新的 Android 架构组件,特别是 ViewModel。

我的印象是 Fragment 不应该知道它属于哪个 Activity 或 Fragment,以便它可以在应用程序的不同上下文中使用。这些示例似乎通过直接在 Fragment 中而不是 Fragment 所有者中声明 ViewModel 范围来与此相矛盾:

viewModel = ViewModelProviders.of(getActivity()).get(SomeViewModel.class);

我希望能够在 Master/Detail 配置中使用此 Fragment,其中两者共享相同的状态(即 ViewModel 实例),以及在 ViewPager 内部,其中所有 Fragment 都需要单独的状态(即单独的 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);

这样,所有者可以决定多个 fragment 是否共享它们的状态。我还没有完全考虑到这一点,但它似乎有点可疑,因为文档中似乎没有暗示任何接近它的东西。我觉得我错过了一些明显的东西。

最佳答案

viewModel = ViewModelProviders.of(getActivity()).get(SomeViewModel.class); 意味着您希望将 ViewModel 的状态限定为 Activity 。如果您不希望将 Fragment 限制在 Activity 范围内,您可以调用 viewModel = ViewModelProviders.of(this).get(SomeViewModel.class);。现在您要做的就是 if (shareState) 然后调用第一个,如果没有则调用第二个。

关于architecture - 如何正确地确定 ViewModel 的范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45993990/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com