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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何通过与我的服务的连接来保存片段的状态相关的知识,希望对你有一定的参考价值。

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

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

答案

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

假设这样,您可以为您的活动创建一个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的帖子上找到更多信息。

以上是关于如何通过与我的服务的连接来保存片段的状态的主要内容,如果未能解决你的问题,请参考以下文章

如何使用模块化代码片段中的LeakCanary检测内存泄漏?

Android导航组件:如何保存片段状态

尝试使用片段保存夜间模式状态

使用 savedInstanceState 保存片段状态

从单个按钮从多个片段中提取数据

通过底部导航栏更改片段时恢复片段状态