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

问题描述 投票:0回答:1

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

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

android android-fragments service fragment bind
1个回答
2
投票

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

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

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

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

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

这是可能的,因为ViewModel类将使用Activity的范围创建,并且无论您重新创建片段多少次,您将获得与您的状态相同的ViewModel实例。

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

© www.soinside.com 2019 - 2024. All rights reserved.