在我的活动中,我使用底部的三个按钮来选择这样的片段,例如:
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
中,我限制了与我的服务的连接。每当我在片段之间切换时,就会创建一个新的片段,我必须绑定一个新的连接。
我想保存所有碎片状态并按其选择恢复它。
感谢。
答案 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的帖子中找到更多信息。