如何通过与我的服务的连接来保存片段的状态

时间:2018-03-02 16:26:04

标签: android android-fragments service fragment bind

在我的活动中,我使用底部的三个按钮来选择这样的片段,例如:

scenarioFragment = new ScenarioFragment();
android.app.FragmentManager fragmentManager = this.getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.fragment, scenarioFragment, scenarioFragment.toString());
fragmentTransaction.addToBackStack("stack");
fragmentTransaction.commit();

所以在ScenarioFragment中,我限制了与我的服务的连接。每当我在片段之间切换时,就会创建一个新的片段,我必须绑定一个新的连接。 我想保存所有碎片状态并按其选择恢复它。 感谢。

1 个答案:

答案 0 :(得分:2)

根据您的说法,您的片段与父母具有相同的活动。

假设这样,您可以为您的活动创建一个ViewModel(作为Android架构组件的一部分引入的组件),并将您想要的任何状态放入其中。

然后,在每个片段中,您可以使用以下语句获取ViewModel:

ViewModelProviders.of(getActivity()).get(ViewModelClassName.class);

此语句的关键是确保传入getActivity,以便只要它们连接到同一父级,就可以在所有片段中获取相同的ViewModel实例。如果您传递Fragment而不是像ViewModelProviders.of(this).get(ViewModelClassName.class);这样的Activity,那么ViewModel的新实例将与片段范围相关联,如果片段被销毁则将被清除。

这是可能的,因为ViewModel类将使用Activity的范围创建,并且重新创建片段的时间并不重要,您将获得与您的状态相同的ViewModel实例。

您可以详细了解Android架构组件here。 如果您想更多地了解ViewModel如何在内部工作,您可以在我撰写here的帖子中找到更多信息。